2016-12-30 33 views
4

我正在審查一些代碼,我橫跨下面的代碼行傳來:爲什麼會?出現在IEnumerable <int>?.ToList()?

List authorIntList = authorIds?.ToList(); 

在上面的例子中,是authorIds一個IEnumerable。在上面的代碼行中,?的用途是什麼?我不確定我以前見過這種模式。它在做什麼以及在哪個版本的.NET中實現?

+5

[空,條件運算符(https://msdn.microsoft.com/en-us/library/dn986595.aspx) –

回答

10

這就是所謂的the "null conditional operator" - 即?.一起 - 新的C#6.0。這意味着,如果authorIds而不是null,那麼它會調用/返回ToList()就可以了。否則,它將返回null。它基本上是語法糖,因此您不必編寫更長的代碼,如List AuthorIntList = authorIds != null ? authorIds.ToList() : null;

-1

修正空條件運算 https://msdn.microsoft.com/en-us/library/dn986595.aspx

這就好比說,如果屬於AuthorID的不是null,則執行ToList()否則返回null。

+2

這其實不太一樣。 –

+2

Elvis是空合併'?:',而不是空條件'?.'。 –

+1

@ rory.ap:空合併運算符'??'不完全相同,因爲它比較爲null而不是false。 –

0

「空條件運算符」作爲一種縮寫的方式存在「如果這不爲空,則執行該操作,否則返回空值」。這是基本相同

List authorIntList = authorIds ? authorIDs.ToList() : null; //null coalescing 

List authorIntList = null; 
if(authorIDs != null) { authorIntList = authorIDs.ToList(); } //traditional if 
0

這是一個空條件運算符,在許多語言的人把它叫做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; 
} 
+0

不是貓王。查看Woot的答案下的評論。 –

+0

@ rory.ap我已經寫過,它被稱爲空條件。在mva.microsoft.com的c#6.0介紹中,他們提到了Elvis的名字,但他們不確定他們會使用這個名字。 –

相關問題