- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我最近发现您可以使用 [CanBeNull]
C# 中的注解告诉 ReSharper(和其他插件)一个方法可以返回 null。这很棒,因为当我不处理这些情况时,它会让 ReSharper 提醒我。
但是,对于 async
返回 Task
的方法或 Task<T>
, 行为是意外的。
例如,考虑这个例子:
[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
。 , 所以我不知道这是怎么回事。
最佳答案
Starting from ReSharper 9.2 EAP4 attributes "ItemCanBeNull" and "ItemNotNull" can be applied to entities of type "Task<T>" and "Lazy<T>"
完美无缺!
附言请不要忘记更新 JetBrains Annotations。
关于c# - CanBeNull 和 ReSharper - 将它与异步任务一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19704710/
我最近发现您可以使用 [CanBeNull] C# 中的注解告诉 ReSharper(和其他插件)一个方法可以返回 null。这很棒,因为当我不处理这些情况时,它会让 ReSharper 提醒我。 但
我想让程序员和我自己知道,一个方法不需要null,如果您无论如何都向它发送null,结果将不会很好。 Lokad Shared Libraries 中有一个NotNullAttribute 和一个Ca
我正在经历将我的 .Net 4.8(不是 Core!)项目转换为使用新的 C# 8“可空引用”功能的过程。 为此,我通过添加 #nullable enable 依次更改每个源代码文件。并用 ? 修饰所
在我们的代码中,我们有自己的注入(inject)框架来启用依赖注入(inject),例如: public class MyClass { [Component("ComponentName1"
ReSharper 有一套代码注释,可用于显式表达 IDE 可以使用的代码意图。两个最有用的注释是 [CanBeNull] 和 [NotNull] 属性,它们可以用在构造函数、属性和方法上,如下所示:
考虑以下 C#.Net 代码: using System.Xml; internal class MyXmlReaderClass : XmlReader { private readonly
我是一名优秀的程序员,十分优秀!