我在一个类中有一个基本的异步方法,该方法返回一个对象。
在某些流程中,它可能会失败,我想向您报告。
但是我只能返回对象。
我尝试了可为空的对象,但收到错误消息:
MyObject必须是非空值类型,才能在通用类型或方法“ System.Nullable”中将其用作参数“ T”
我假设我可以使用异常,但是我想在调用函数中使用一些更简单的方法。
我也不能在异步方法中使用ref或out。
有没有一种方法可以报告成功或失败的正确/错误?
public static async Task<MyObject> getObject()
{
if (NotOkFromSomeReason())
{
//Not sure what to do here
}
return await myDataBase.FindAsync(something);
}
Run Code Online (Sandbox Code Playgroud)
我称它为:
MyObject object = await getObject();
// I want something simple as if(object)...
Run Code Online (Sandbox Code Playgroud)
只需将其包装到另一个类中,该类将返回所需的实例和状态代码 - 例如:
public class StatusReport
{
public boolean Ok { get; set; }
public MyObject Instance { get; set; }
}
public static async Task<StatusReport> getObject()
{
if (NotOkForSomeReason())
{
return new StatusReport { Ok = false };
}
return new StatusReport { Ok = true, Instance = await myDataBase.FindAsync(something) };
}
Run Code Online (Sandbox Code Playgroud)
如果null可以选择返回,则可以执行以下操作:
public static Task<MyObject> getObject()
{
if (NotOkFromSomeReason())
{
return Task.FromResult<MyObject>(null);
}
return myDataBase.FindAsync(something);
}
Run Code Online (Sandbox Code Playgroud)
PS:我想await此功能中没有其他代码可使用,因此已删除了async。否则,您可以只使用async限定符并null直接返回。由于它是返回Task对象,因此仍然可以从外面等待
然后,您可以检查null外面:
MyObject myObject = await getObject();
if(myObject == null)
{
}
Run Code Online (Sandbox Code Playgroud)
仅当null不可能的“正确”结果时,这才起作用
否则您可以使用例外
| 归档时间: |
|
| 查看次数: |
6721 次 |
| 最近记录: |