C# ReSharper代码注释异步任务<;T>;
是否可以标记C# ReSharper代码注释异步任务<;T>;,c#,.net,annotations,async-await,resharper,C#,.net,Annotations,Async Await,Resharper,是否可以标记异步任务的结果可以为空?使用属性[CanBeNull]无效,因为异步任务的返回值从不为空 [CanBeNull] // not working... private async Task<T> doSomeFancyAsyncStuff([NotNull] object icantbenull) { ... [CanBeNull]//不工作。。。 私有异步任务doSomeFancyAsyncStuff([NotNull]对象icantbenull){。。。 您可以使用R
异步任务的结果可以为空?使用属性[CanBeNull]无效,因为异步任务的返回值从不为空
[CanBeNull] // not working...
private async Task<T> doSomeFancyAsyncStuff([NotNull] object icantbenull) { ...
[CanBeNull]//不工作。。。
私有异步任务doSomeFancyAsyncStuff([NotNull]对象icantbenull){。。。
您可以使用ResharperItemCanBeNullAttribute
可以应用于从IEnumerable派生的类型的符号以及任务和惰性类的符号,以指示集合项、任务.Result属性或惰性.value属性的值可以为空
适用于您的示例:
[ItemCanBeNull]
public async Task<string> GetSomeName() {
var time = DateTime.Now;
if(time.Second == 30) {
return "Jimmy";
} else {
return null;
}
}
[ItemCanBeNull]
公共异步任务GetSomeName(){
var time=DateTime.Now;
如果(time.Second==30){
返回“吉米”;
}否则{
返回null;
}
}
在这种情况下,它永远不会为null,因为编译器正在任务中包装您的方法返回值-如果您删除了async关键字,并且必须自己处理任务返回值,那么我会想象它会很好地工作。我假设您实际想要的是说任务的结果可以为null,c正确吗?你想指出任务的结果可以为空吗?当然可以,但任务本身不能。@MartinLiversage是的,这是我的意图。只是为了确保如果其他程序员试图使用结果而不检查结果是否为空,resharper会惹恼他们。我相信你的问题是关于和否。T可能是n如果它是一个类,则ull是明确的,但我想使用代码契约将其显式标记为结果[CanBeNull]
你说的是Resharper CanBeNull属性吗?谷歌会快速搜索到这一点,你可以添加你的评论作为答案,这样我就可以标记它吗?也许有人会像我一样感到困惑。我以为该属性是MS代码契约的东西。很抱歉造成困惑:)