2016-08-20 32 views
0

我刚安装ReSharper的,它已经改变了检查空之前选择了LINQ

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

return dto?.Select(item => new test 
     { 
    return new test{ 
    obj1 = "", 
    obj2 = "", 
} 

我还没有见过

dto?.Select 

试图谷歌没有运气的意思..有人可以解释一下,或者指出我正确的方向去玷污

我收集它简单地检查null?

+1

这被称为“空传播”,这是C#6.0中的一项新功能。实际上,这与Linq无关。 – SimpleVar

回答

1

在C#6中新引入空传播运算符。return dto?.Select ...表示如果dto为null,则此语句将返回null否则将执行其余部分。 另一个例子,只是补差,假设你有这inturn有巷(串)地址属性Employee对象,邮递区号等 所以,如果你需要得到的地址车道值,你可以这样做:

var lane = employee?.Address?.Lane; 

如果员工或地址为空,则返回null;否则返回车道值。

这可以通过多种方式进行组合,非常方便。 例如,

int someIntegerValue = someObject?.SomeIntValue ?? 0; 

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

1

问号操作行为上可为空值和

x?<operation> 

转化为

x.HasValue ? x.Value.<operation> : null 

它基本上是说:“这样做,如果我不是null;否则,让我为空”。

你在你的原代码后有

return null 

声明?我很惊讶,ReSharper会在其转换中假定返回null。