Tho*_*sen 20 c# linq c#-8.0 nullable-reference-types .net-core-3.0
我想在 C# 8.0 中测试新的可为空引用类型功能。
我启动了一个针对 .NET Core 3.0 的新项目,在.csproj文件中启用了可为空的引用类型,并开始编码。我创建了一个简单的列表,它接受 astring[]并返回该string数组中等于 的abc。现在,因为我不确定abc数组中是否真的存在,所以我使用FirstOrDefault(),null如果没有找到匹配项,它应该默认为。
using System;
using System.Linq;
public string FindArgument(string[] args)
{
var arg = args.FirstOrDefault(x => x == "abc");
return arg;
}
Run Code Online (Sandbox Code Playgroud)
我的方法的返回值string,这应该现在是非空的类型。由于FirstOrDefault()可能返回null,我希望上述方法在返回可能为空 arg变量时产生警告。它不是。
查看FirstOrDefault()Visual Studio 中的签名,很明显原因:该方法返回一个string,而不是string?我期望的可空等价物。
使用下面的方法体确实会产生我预期的警告:
var arg = args.Contains("abc") ? "abc" : null;
return arg;
Run Code Online (Sandbox Code Playgroud)
System.Linq当面向 .NET Core 3.0 时,系统库(在本例中)真的不会公开可空性信息吗?
rpf*_*pfc 14
看起来System.Linq在 3.0 版本中注释为不可为空。因此可空引用类型不会发出正确的警告。
您可以在roslyn repo 中检查类似的问题。Github 上的这个未解决的问题与您的问题非常相似。在那个问题中,贡献者解释了当前的问题:
System.Linq在corefx 的master分支中注释为可空,但不在release/3.0 中注释。所以编译器没有什么意外。编译器应该提供一些诊断信息,表明您正在使用可空性遗忘的东西。
| 归档时间: |
|
| 查看次数: |
1483 次 |
| 最近记录: |