使用VB.NET IIF我得到NullReferenceException

我正在做一些debugging,所以我想loggingeventArgs的值

我有一个简单的线,基本上是:

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

我了解IIF函数的方法,如果e.Value是Nothing(null),那么它应该返回空string,如果不是,它应该返回值的.ToString。 我是,但是得到一个NullReferenceException。 这对我来说没有意义。

有任何想法吗?

IIf是一个实际的函数,所有的参数都被计算。 If关键字被添加到VB.NET 2008中,以提供您期望的短路function。

尝试

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

VB不做Iif中的短路评估。 在你的情况下,e.Value.ToString()正在被评估,不pipee.Value是什么。

这是预期的行为。

IIF是一个function; 因此函数的参数在发送到函数之前将被评估。

相比之下,C#中的三元运算符是一种语言结构,如果三元的expression式为真,则它将阻止评估第二个参数。