使用VB.NET IIF我得到NullReferenceException

时间:2009-01-09 17:31:46

标签: .net vb.net nullreferenceexception

我正在做一些调试,所以我想记录eventArgs值

我有一条简单的路线基本上可以做到:

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

我理解IIF函数的方式,如果e.Value是Nothing(null)那么它应该返回空字符串,否则它应该返回值的.ToString。我是,但是得到一个NullReferenceException。这对我没有意义。

有什么想法吗?

3 个答案:

答案 0 :(得分:75)

IIf是一个实际函数,因此所有参数都会被评估。 If关键字已添加到VB.NET 2008中,以提供您期望的短路功能。

尝试

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

答案 1 :(得分:3)

VB不会在Iif中进行短路评估。在你的情况下,无论e.Value是否为零,都会评估e.Value.ToString()。

答案 2 :(得分:3)

这是预期的行为。

IIF是一个函数;因此,在将函数发送到函数之前,将对函数的参数进行评估。

相比之下,C#中的三元运算符是一种语言结构,如果三元组的表达式为真,则会阻止对第二个参数的求值。