我正在做一些调试,所以我想记录eventArgs值
我有一条简单的路线基本上可以做到:
logLine = "e.Value: " + IIf(e.Value Is Nothing, "", e.Value.ToString())
我理解IIF函数的方式,如果e.Value是Nothing(null)那么它应该返回空字符串,否则它应该返回值的.ToString。我是,但是得到一个NullReferenceException。这对我没有意义。
有什么想法吗?
答案 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#中的三元运算符是一种语言结构,如果三元组的表达式为真,则会阻止对第二个参数的求值。