使用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式为真,则它将阻止评估第二个参数。