我正在审查一些代码,我横跨下面的代码行传来:为什么会?出现在IEnumerable <int>?.ToList()?
List authorIntList = authorIds?.ToList();
在上面的例子中,是authorIds一个IEnumerable。在上面的代码行中,?
的用途是什么?我不确定我以前见过这种模式。它在做什么以及在哪个版本的.NET中实现?
我正在审查一些代码,我横跨下面的代码行传来:为什么会?出现在IEnumerable <int>?.ToList()?
List authorIntList = authorIds?.ToList();
在上面的例子中,是authorIds一个IEnumerable。在上面的代码行中,?
的用途是什么?我不确定我以前见过这种模式。它在做什么以及在哪个版本的.NET中实现?
这就是所谓的the "null conditional operator" - 即?
和.
一起 - 新的C#6.0。这意味着,如果authorIds
是而不是null
,那么它会调用/返回ToList()
就可以了。否则,它将返回null。它基本上是语法糖,因此您不必编写更长的代码,如List AuthorIntList = authorIds != null ? authorIds.ToList() : null;
。
修正空条件运算 https://msdn.microsoft.com/en-us/library/dn986595.aspx
这就好比说,如果属于AuthorID的不是null,则执行ToList()否则返回null。
这其实不太一样。 –
Elvis是空合并'?:',而不是空条件'?.'。 –
@ rory.ap:空合并运算符'??'不完全相同,因为它比较为null而不是false。 –
“空条件运算符”作为一种缩写的方式存在“如果这不为空,则执行该操作,否则返回空值”。这是基本相同
List authorIntList = authorIds ? authorIDs.ToList() : null; //null coalescing
或
List authorIntList = null;
if(authorIDs != null) { authorIntList = authorIDs.ToList(); } //traditional if
这是一个空条件运算符,在许多语言的人把它叫做Elvis操作符。它已从c#6.0中添加并使用null检查代码。
所以,如果你有这样的:
var x= a?.b?.c?.d;
X将是无效的,如果任何一个,B,C的或D为空。如果它们全都不为空,它将是d中的值。在你必须把它们放在条件之前。
if(a!= null && a.b!= null && a.b.c!= null)
{
x= a?.b?.c?.d;
}
不是猫王。查看Woot的答案下的评论。 –
@ rory.ap我已经写过,它被称为空条件。在mva.microsoft.com的c#6.0介绍中,他们提到了Elvis的名字,但他们不确定他们会使用这个名字。 –
[空,条件运算符(https://msdn.microsoft.com/en-us/library/dn986595.aspx) –