我正在做一些调试,所以我想记录eventArgs值
我有一个基本上做的简单线:
logLine = "e.Value: " + IIf(e.Value Is Nothing, "", e.Value.ToString())
Run Code Online (Sandbox Code Playgroud)
我理解IIF函数的方式,如果e.Value是Nothing(null)那么它应该返回空字符串,否则它应该返回值的.ToString.我是,但是得到一个NullReferenceException.这对我来说没有意义.
有任何想法吗?
我们这些在VB/VB.NET中工作的人看到的代码类似于这种令人厌恶的代码:
Dim name As String = IIf(obj Is Nothing, "", obj.Name)
Run Code Online (Sandbox Code Playgroud)
我说"憎恶"有三个简单的原因:
IIf是一个函数,所有参数都被评估; 因此,如果obj在上述调用中没有任何内容,那么NullReferenceException将抛出一个.对于习惯于使用C#等语言的短路三元运算符的人来说,这是出乎意料的行为.IIf是一个函数,所以它会产生函数调用的开销.同样,虽然这不是什么大问题,但对于那些期望它表现为语言固有的三元操作的人来说,这感觉不对.IIf是非泛型的,因此接受类型的参数Object,这意味着以下调用框(我相信)总共有三个整数:
' boxes 2nd and 3rd arguments as well as return value '
Dim value As Integer = IIf(condition, 1, -1)
现在,在一些更新版本的VB.NET中(我不确定数字是多少),If引入了运算符,其IIf功能与函数完全相同,但(据我所知)没有相同的缺点.也就是说,它确实提供了短路,并且它是一种内在的VB操作.但是,我不确定最后一部分.在MSDN文档似乎并没有表示是否If箱及其参数与否.有人知道吗?