2009-01-09 101 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#中的三元运算符是一种语言结构,如果三元表达式为真,则阻止评估第二个参数。

相关问题