相关疑难解决方法(0)

使用VB.NET IIF我得到NullReferenceException

我正在做一些调试,所以我想记录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.这对我来说没有意义.

有任何想法吗?

.net vb.net nullreferenceexception

41
推荐指数
1
解决办法
2万
查看次数

VB.NET"If"运算符会导致装箱吗?

我们这些在VB/VB.NET中工作的人看到的代码类似于这种令人厌恶的代码:

Dim name As String = IIf(obj Is Nothing, "", obj.Name)
Run Code Online (Sandbox Code Playgroud)

我说"憎恶"有三个简单的原因:

  1. IIf是一个函数,所有参数都被评估; 因此,如果obj在上述调用中没有任何内容,那么NullReferenceException将抛出一个.对于习惯于使用C#等语言的短路三元运算符的人来说,这是出乎意料的行为.
  2. 因为它 IIf是一个函数,所以它会产生函数调用的开销.同样,虽然这不是什么大问题,但对于那些期望它表现为语言固有的三元操作的人来说,这感觉不对.
  3. 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箱及其参数与否.有人知道吗?

vb.net boxing ternary-operator

18
推荐指数
2
解决办法
667
查看次数