C# 在linq上选择之前检查null

C# 在linq上选择之前检查null,c#,.net,linq,C#,.net,Linq,我刚刚安装了ReSharper,它已经改变了 if(dto != null) { return new test{ obj1 = "", obj2 = "", } } 进入 我以前没见过 dto?.Select 试图用谷歌搜索其含义,但运气不佳。。有人能解释一下吗,或者给我指出正确的定义方向 我认为它只是简单地检查null?问号操作符作用于可为null的值和 x?<operation> 在原始代码中稍后的语句?我很惊讶ReSharper在其转换中会

我刚刚安装了ReSharper,它已经改变了

if(dto != null)
{
    return new test{
     obj1 = "",
     obj2 = "",
 }
}
进入

我以前没见过

dto?.Select
试图用谷歌搜索其含义,但运气不佳。。有人能解释一下吗,或者给我指出正确的定义方向


我认为它只是简单地检查null?

问号操作符作用于可为null的值和

x?<operation>

在原始代码中稍后的语句?我很惊讶ReSharper在其转换中会假定返回null。

null传播操作符是在C#6中新引入的。返回dto?。选择。。。意味着,如果dto为null,则此语句将返回null,否则将执行其余部分。 另一个例子,假设您有一个带有Address属性的Employee对象,inturn中有Lane(string)、Pincode等。 因此,如果需要获取地址通道值,可以执行以下操作:

var lane = employee?.Address?.Lane;
如果员工或地址为空,则返回空;否则返回车道值

这可以通过多种方式组合在一起,非常方便。 例如

基本上,使用此功能可以避免许多空检查。

这称为“空传播”,是C#6.0中的一个新功能。实际上,这与林克无关。
x.HasValue ? x.Value.<operation> : null
return null
var lane = employee?.Address?.Lane;
int someIntegerValue = someObject?.SomeIntValue ?? 0;