CanBeNull and ReSharper - using it with async Tasks?(CanBeNull和ReSharper-将其用于异步任务?)
问题描述
我最近发现,您可以在C#中使用[CanBeNull]
注释来告诉ReSharper(和其他插件)方法可以返回NULL。这很棒,因为当我不能处理这些情况时,ReSharper会提醒我。
但是,对于返回Task
或Task<T>
的async
方法,这种行为是意外的。
例如,考虑以下示例:
[CanBeNull]
public async Task<string> GetSomeName() {
var time = DateTime.Now;
if(time.Second == 30) {
return "Jimmy";
} else {
return null;
}
}
我知道这个场景有点奇怪,但为了简单起见,请原谅我。如果我(启用了ReSharper)然后尝试在其他地方调用该方法,它会发出不正确的警告。例如:
var myValue = await GetSomeName();
var subValue = myValue.Trim(); //here, ReSharper should warn me that subValue is null.
这里,ReSharper在错误的位置警告我。第一行生成一个警告(它声称任务本身实际上可以为空,这是错误的)。第二行不会生成警告,这是警告应该出现的位置。
如果我要完全遵守ReSharper,则必须编写以下代码:
var myTask = GetSomeName();
if(myTask != null) {
//this is silly, and is always true, but ReSharper thinks that the Task can be null due to the CanBeNull attribute.
var myValue = await myTask;
var subValue = myValue.Trim(); //this could generate an error, but ReSharper doesn't warn me.
}
这是我应该提交的ReSharper的错误吗?还是我错误地使用了注释?我想我们都同意任务本身不可能是null
,所以我不知道这有什么意义。
推荐答案
Ivan Serduk said here:
从ReSharper 9.2开始,EAP4属性"ItemCanBeNull"和"ItemNotNull"可以应用于&Quot;任务<;T&>和&Quot;Lazy<;T&>类型的实体
完美无瑕!
附注。请不要忘记更新JetBrains批注。
这篇关于CanBeNull和ReSharper-将其用于异步任务?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:CanBeNull和ReSharper-将其用于异步任务?
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- 输入按键事件处理程序 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 如何用自己压缩一个 IEnumerable 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01