相关疑难解决方法(0)

CanBeNull和ReSharper - 将它与异步任务一起使用?

我最近发现你可以使用[CanBeNull]C#中的注释告诉ReSharper(和其他插件)一个方法可以返回null.这很棒,因为当我不处理这些情况时,它会让ReSharper提醒我.

但是,对于async返回a Task或a的方法,Task<T>行为是意外的.

例如,考虑这个例子:

[CanBeNull]
public async Task<string> GetSomeName() {
    var time = DateTime.Now;
    if(time.Second == 30) { 
        return "Jimmy"; 
    } else {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道这种情况有点奇怪,但为了简单起见,请耐心等待.如果我(启用ReSharper)然后尝试在别处调用该方法,它会发出错误警告.例如:

var myValue = await GetSomeName();
var subValue = myValue.Trim(); //here, ReSharper should warn me that subValue is null.
Run Code Online (Sandbox Code Playgroud)

在这里,ReSharper在不正确的地方警告我.第一行生成一个警告(并声称任务本身实际上可以为null,这是错误的).第二行不会生成警告,警告应该是警告的位置.

如果我完全遵守ReSharper,则必须编写以下代码:

var myTask = GetSomeName();
if(myTask != null) { 
    //this is silly, and is always true, but ReSharper thinks that the Task can be null due …
Run Code Online (Sandbox Code Playgroud)

c# resharper

24
推荐指数
2
解决办法
2829
查看次数

标签 统计

c# ×1

resharper ×1