我似乎回想起了一些有關避免C#中的Immediate If操作符(?:)的問題,但我不知道我在哪裏閱讀它以及它是什麼。我認爲這與真實部分和虛假部分在決定條件結果之前被執行有關。它是否正確?或者這在VB.Net中是如此?如果C#中的操作符(?:)立即可能存在缺陷?
3
A
回答
22
它實際上被稱爲條件運算符,在MSDN中被稱爲「?:」。它基本上是if-else
的簡寫符號,只是這實際上是表達式而不是語句。由於它相當於if
,因此對此操作員沒有任何警告。
你讀過的關於可能是關於在VB.NET中的Iif
函數。作爲一個功能,它的計算結果被調用之前所有的參數,所以
Dim s As String = Iif(person Is Nothing, String.Empty, person.FirstName)
將導致NullReferenceException
拋出。
1
對Anton的回覆 - 請注意,這也是在lambda表達式中指定這種類型的唯一方法(對於LINQ-to [某些db]等)。
不足之處在於,如果您正在測試多件事情,可能會感到困惑。有關使用/不使用謂詞的類型測試的示例,請參見discussion here。
2
我看到使用?的主要缺點是:而不是「常規」的if-else塊關於可讀性和可維護性;大多數評論家認爲,如果「其他」比「?」更清晰,即使我認爲這與個人品味有關,但很明顯,如果您需要爲任何需要完全分支的分支中的?:語句添加指令用if-else重寫它,從而使if-else從一開始就是更好的選擇。
4
只用它來簡單的事情,像
Console.WriteLine(MyBool ? "It's true!" : "Nope");
如果試圖邏輯添加到裏面,那麼代碼看起來非常糟糕。
相關問題
- 1. C++測試示例中可能存在的邏輯缺陷
- 2. 操作系統結構是否存在根本性缺陷?
- 3. 我的新標記語言可能存在的缺陷?
- 4. IA32立即操作數
- 5. Bootstrap模式存在缺陷
- 6. TFS中的缺陷和缺陷工作項有何區別?
- 7. C++內存設計缺陷主要GTEST
- 8. 如何立即取消捲曲操作?
- 9. wxPython可能筆記本GetPage缺陷
- 10. C#中的預定操作,帶有FullStop選項立即
- 11. C#==操作符在立即窗口行爲不同於在運行時
- 12. 創建IObservable並立即返回緩存的異步操作的結果
- 13. C++在對象「更改」後立即執行操作
- 14. C++字符串操作 - 如果STU
- 15. 如何在jira上自動創建缺陷的構建缺陷?
- 16. ClearInterval()不能立即工作
- 17. UIView.hidden不能立即工作
- 18. file.createNewFile()不能立即工作
- 19. 角引導選項卡 - 如果缺陷
- 20. 現貨缺陷C++代碼
- 21. Jquery tablesorter - 連字符缺陷
- 22. UITableViewRowAnimation具有可見缺陷
- 23. 如何在調用後立即返回c#中的字符串。
- 24. 異步操作立即等待
- 25. DOM操作無法立即執行
- 26. 高架立即自定義操作
- 27. 保存外觀>主題選項後立即執行操作
- 28. 是否可以從C#COM互操作對象寫入VBA立即窗口?
- 29. jQuery hasClass沒有工作或有缺陷,如果陳述
- 30. C#移動操作掛起,而不是立即拋出異常
好,安東! Gerrie可能讀過關於VB中的IIf函數。 – Cerebrus 2009-02-05 12:17:37
是的,我可能錯誤與VB.Net IIf函數。謝謝。 – 2009-02-05 12:19:23