45

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

我有一条简单的线,基本上可以:

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

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

有任何想法吗?

4

3 回答 3

84

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

尝试

logLine = "e.Value: " + If(e.Value Is Nothing, "", e.Value.ToString())
于 2009-01-09T17:33:55.420 回答
4

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

于 2009-01-09T17:33:53.207 回答
3

这是预期的行为。

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

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

于 2009-01-09T17:33:53.953 回答