2009-01-09 100 views
36

我做一個小的調試,所以我想記錄EventArgs的價值使用VB.NET IIF我得到的NullReferenceException

我有一個簡單的線,基本上不會:

logLine = "e.Value: " + IIf(e.Value Is Nothing, "", e.Value.ToString()) 

的方式我理解IIF函數,如果e.Value是Nothing(null),那麼它應該返回空字符串,否則它應該返回值的.ToString。我是,但是得到一個NullReferenceException。這對我沒有意義。

任何想法的?

回答

68

IIf是一個實際的函數,所以所有參數都被計算。 If關鍵字已添加到VB.NET 2008中以提供您期望的短路功能。

嘗試

logLine = "e.Value: " + If(e.Value Is Nothing, "", e.Value.ToString()) 
+5

另外:如果()是類型安全。 IIf()不是。 – 2009-01-09 17:35:57

3

VB不會在Iif中進行短路評估。在你的情況下,e.Value.ToString()正在被評估,不管e.Value是什麼都不是。

3

這是預期的行爲。

IIF是一個函數;因此函數的參數將在發送給函數之前進行評估。

相反,C#中的三元運算符是一種語言結構,如果三元表達式爲真,則阻止評估第二個參數。

相關問題