【发布时间】:2020-04-27 15:03:25
【问题描述】:
我们的代码库(.NET Standard 2.0 库)中有以下方法:
public Task<T> GetDefaultTask<T>()
{
return Task.FromResult(default(T));
}
我们目前正在尝试转换到 C# 8.0 Nullability 并在上面的代码中收到警告:
警告 CS8604:“Task Task.FromResult(T result)”中的参数“result”可能为空引用参数。
为什么我们会收到此警告?对我来说,将null 作为参数传递给Task.FromResult 看起来非常好。
重要提示:我们希望允许任务包含空值。但是添加Task<T?> 会迫使我们添加我们无法做到的类型约束。
【问题讨论】:
-
你不是声明了一个不可为空的 T (Task
) 的期望,但是却返回了 default(T),它对于引用类型是 null 吗?一种方法是更改为 T?但是你需要限制上课。或者我们默认!而不是默认拒绝可空性。 -
无论这是一个好主意还是坏主意,您都可以通过启用/禁用命令来消除此警告,例如 stackoverflow.com/a/61436270/2946329
-
@Dmitri:我添加了一个重要说明来详细说明情况。
标签: c# .net .net-standard-2.0 c#-8.0 nullability