Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未从FirstOrDefault公开可为null的引用类型信息_C#_Linq_.net Core 3.0_C# 8.0_Nullable Reference Types - Fatal编程技术网

C# 未从FirstOrDefault公开可为null的引用类型信息

C# 未从FirstOrDefault公开可为null的引用类型信息,c#,linq,.net-core-3.0,c#-8.0,nullable-reference-types,C#,Linq,.net Core 3.0,C# 8.0,Nullable Reference Types,我想在C#8.0中测试这个新特性 我启动了一个以.NET Core 3.0为目标的新项目,在.csproj文件中启用了可空引用类型,并开始编码。我创建了一个简单的列表,它接受一个string[],并返回该数组中等于abc的string。现在,因为我不确定数组中是否确实存在abc,所以我使用FirstOrDefault(),如果没有找到匹配项,它应该默认为null 使用系统; 使用System.Linq; 公共字符串FindArgument(字符串[]args) { var arg=args.Fi

我想在C#8.0中测试这个新特性

我启动了一个以.NET Core 3.0为目标的新项目,在
.csproj
文件中启用了可空引用类型,并开始编码。我创建了一个简单的列表,它接受一个
string[]
,并返回该数组中等于
abc
string
。现在,因为我不确定数组中是否确实存在
abc
,所以我使用
FirstOrDefault()
,如果没有找到匹配项,它应该默认为
null

使用系统;
使用System.Linq;
公共字符串FindArgument(字符串[]args)
{
var arg=args.FirstOrDefault(x=>x==“abc”);
返回arg;
}
我的方法返回
字符串
,现在应该是不可为空的类型。由于
FirstOrDefault()
可能返回
null
,因此我希望上述方法在返回maybe null
arg
变量时会产生警告。事实并非如此

查看Visual Studio中的
FirstOrDefault()
的签名,很清楚为什么:该方法返回一个
字符串
,而不是我所期望的可为空的等价
字符串?

使用下面的方法体确实会产生我预期的警告:

var arg=args.Contains(“abc”)?“abc”:空;
返回arg;

当以.NET Core 3.0为目标时,系统库(在本例中为
system.Linq
)真的没有公开可空性信息吗?

看起来像
system.Linq
在3.0版本中没有可空性注释。因此,可为null的引用类型不会发出正确的警告

您可以在中检查类似的问题。这和你的问题很相似。在该期中,一位撰稿人解释了当前的问题:

System.Linq
在corefx的master分支中注释为空,但在release/3.0中不为空。所以在编译器中没有什么意外的。 编译器应该提供一些诊断,显示您正在使用可为空的不经意的东西


看起来像是
System.Linq
在3.0版本中不可为空。因此,可为null的引用类型不会发出正确的警告

您可以在中检查类似的问题。这和你的问题很相似。在该期中,一位撰稿人解释了当前的问题:

System.Linq
在corefx的master分支中注释为空,但在release/3.0中不为空。所以在编译器中没有什么意外的。 编译器应该提供一些诊断,显示您正在使用可为空的不经意的东西


此外,现在可以使用获取正确的注释。在.NETCore3.1中仍然是这样。这使得使用可空引用类型变得不那么好。我相信pull请求解决了这个问题,但显然我们必须等到.NET 5才能得到它:-(肮脏的工作…选择你的项目,铸造为可为Null的类型。Re shaper抱怨其冗余,但确实有效。var nullableMatch=collection.Select(x=>(MyType?)x)。FirstOrDefault(x=>x.Field==value);除此之外,您现在可以使用获取正确的注释。在.NET Core 3.1中仍然是这样。这使得使用可为空的引用类型变得不那么好。我相信pull请求解决了这一问题,但显然我们必须等到.NET 5才能获得:-(肮脏的工作环境…选择您的项,强制转换为可空类型。重新整形器抱怨其冗余,但确实有效。var nullableMatch=collection.Select(x=>(MyType?)x.FirstOrDefault(x=>x.Field==value);