2012-03-14 51 views
1

嘿我只是碰到了下面的語句如果else語句設定值什麼這叫

return name != null ? name : "NA"; 

來到我只是想知道這是什麼東西稱爲.NET

做的?代表,那麼做這個......?

+4

他們被稱爲'三運營商'。他們暗示,如果條件評估爲「真」,那麼'?'後面的表達式將被執行,否則':'後面的表達式將被執行。 – Lion 2012-03-14 03:30:22

+1

這可以縮短爲'返回名稱? 「NA」;' – 2012-03-14 03:32:31

+1

值得指出@Jonathan提到的'''是'null-coalescing operator'。即:如果左側的值爲空,則將值返回到右側,因此可以使用而不是三元運算符。但是,如果你要'返回string.IsNullOrEmpty(名稱)? 「NA」:name',那麼空合併運算符就沒有用了。 – 2012-03-14 03:39:56

回答

9

這是一個「有條件的經營者」俗稱the Ternary operator

它在許多編程語言中。

+1

它也經常被稱爲「第三」運營商,但應該指出,這是不正確的。 – 2012-03-14 03:34:16

+0

三元剛剛表示操作員由三部分組成,對嗎? – 2014-12-28 03:00:39

1

正如獅子在評論中所說,他們被稱爲ternary operators,雖然他們也被稱爲inline if statmenetsconditional operator

如果您想了解更多關於他們,這個維基百科頁面會有所幫助,並且它有很多編程語言的例子:http://en.wikipedia.org/wiki/%3F:

0

這是條件運算符是一個三元運算符。由於沒有那麼多的其他三元操作符(操作符有三個參數),許多人相信它被稱爲三元操作符,這是不準確的!

+3

我把你引用到C#4規範的第7.14節,其中規定「*':'運算符被稱爲條件運算符,有時也被稱爲三元運算符。」爲什麼你相信那些相信條件運算符有時被稱爲三元運算符是錯誤的? – 2012-03-14 05:35:38

+0

@Eric Lippert因爲「三元運營商」是一類運營商而不是運營商。這與調用'!'一元運算符相同。 – wintersolutions 2012-03-14 11:47:03

+0

如果'!'是語言中唯一的一元操作符,那麼從上下文中可以清楚地看到「一元操作符」是什麼。 – 2012-03-14 12:09:39

0

剛剛添加到別人的答案,注意,...

condition ? trueResult : falseResult 

...只有condition,要麼trueResultfalseResult(但不能同時)進行評價。這使得它可能寫出這樣的代碼......

string name = user == null ? "<nobody>" : user.Name; 

...沒有NullReferenceException以來user.Name拋出的風險,如果user是非null纔會被評估。將此行爲與VB.NET的If operatorIIf function進行比較。