C# 等待项目。任务<;布尔>;()以便项可以为空
在异步方法中,我执行如下调用:C# 等待项目。任务<;布尔>;()以便项可以为空,c#,asynchronous,async-await,C#,Asynchronous,Async Await,在异步方法中,我执行如下调用: bool result=wait SomeClassInstance.GetResultAsync(); GetResultAsync()返回一个任务,因此可以等待 但是,SomeClassInstance可能为空。在这种情况下,我希望结果为假,即具有如下内容: bool result=wait SomeClassInstance?.GetResultAsync(); 或 bool result=wait SomeClassInstance.GetResult
bool result=wait SomeClassInstance.GetResultAsync();
GetResultAsync()
返回一个任务,因此可以等待
但是,SomeClassInstance
可能为空。在这种情况下,我希望结果
为假
,即具有如下内容:
bool result=wait SomeClassInstance?.GetResultAsync();
或
bool result=wait SomeClassInstance.GetResultAsync()??虚假的;
然而,这似乎是不可能的,因为我的第一个提议抛出了一个NullReferenceException
,第二个提议将不会编译,因为。GetResultAsync()
的计算结果是bool
,而不是bool?
,因此?
无法应用
我要监督什么吗?或者这在c#中是不可能的?
(我知道一些变通方法,如:bool result=SomeClassInstance!=null&&wait SomeClassInstance.GetResultAsync();
)可以采用不同的方法,例如:
// #1
bool result = await (SomeClassInstance?.GetResultAsync() ?? Task.FromResult(false));
// #2
bool result = SomeClassInstance != null : await SomeClassInstance.GetResultAsync() : false;
如果您试图使调用GetResultAsync
更紧凑并避免空检查,那么您应该确保SomeClassInstance
从不为空,或者您可以用另一种方法将调用包装为空,如下所示:
class SomeClass
{
private SomeClassInstance { get; set; }
public async Task<bool> GetNullSafeResult()
{
return await (SomeClassInstance?.GetResultAsync() ?? Task.FromResult(false));
}
}
class-SomeClass
{
私有SomeClassInstance{get;set;}
公共异步任务GetNullSafeResult()
{
返回等待(SomeClassInstance?.GetResultAsync()?Task.FromResult(false));
}
}
然后总是调用GetNullSafeResult
,而不是直接使用SomeClassInstance
。我已经提到过的第二个解决方案。你的第一个似乎也很有效,而且可能是我要坚持的。您知道是否可以在SomeClassInstance中返回某些内容。Get
返回任务。FromResult(false)
?@lean但我不确定是否遵循了问题。您希望能够调用SomeClassInstance.Get
,即使SomeClassInstance
为空?可以这样说SomeClassInstance
封装在另一个类中,即SomeClass.SomeClassInstance
SomeClass
然后为SomeClassInstance
设置一个get
和set
。对于nice代码,最好是在SomeClass.SomeClassInstance.Get
任务中返回FromResult(false)
或其他东西。@Leander由于getter必须返回SomeClassInstance
-键入一个任务将不适合getter的签名,因此不能这样做。但我也会说这不是一个好的设计方法。如果您希望有一个易于调用的方法,我建议将调用包装到GetResultAsync
-我将用一个示例更新我的问题1秒。。。