2009-02-05 28 views

回答

22

它實際上被稱爲條件運算符,在MSDN中被稱爲「?:」。它基本上是if-else的簡寫符號,只是這實際上是表達式而不是語句。由於它相當於if,因此對此操作員沒有任何警告。

你讀過的關於可能是關於在VB.NET中的Iif函數。作爲一個功能,它的計算結果被調用之前所有的參數,所以

Dim s As String = Iif(person Is Nothing, String.Empty, person.FirstName) 

將導致NullReferenceException拋出。

+1

好,安東! Gerrie可能讀過關於VB中的IIf函數。 – Cerebrus 2009-02-05 12:17:37

+0

是的,我可能錯誤與VB.Net IIf函數。謝謝。 – 2009-02-05 12:19:23

1

對Anton的回覆 - 請注意,這也是在lambda表達式中指定這種類型的唯一方法(對於LINQ-to [某些db]等)。

不足之處在於,如果您正在測試多件事情,可能會感到困惑。有關使用/不使用謂詞的類型測試的示例,請參見discussion here

2

我看到使用?的主要缺點是:而不是「常規」的if-else塊關於可讀性和可維護性;大多數評論家認爲,如果「其他」比「?」更清晰,即使我認爲這與個人品味有關,但很明顯,如果您需要爲任何需要完全分支的分支中的?:語句添加指令用if-else重寫它,從而使if-else從一開始就是更好的選擇。

4

只用它來簡單的事情,像

Console.WriteLine(MyBool ? "It's true!" : "Nope"); 

如果試圖邏輯添加到裏面,那麼代碼看起來非常糟糕。