deo*_*oll 2 vb.net iif-function nullreferenceexception
一直在看很多关于使用Iif()的帖子/文章.当我尝试像C/C#/ C++等那样使用像条件运算符这样的IIf()时,所有这一切都开始了.
我试图做的完全符合以下帖子的内容:
使用VB.NET IIF我得到NullReferenceException
但是,我实现的解决方案是从以下msdn站点借来的:
http://msdn.microsoft.com/en-us/library/27ydhh0d%28v=vs.80%29.aspx
之后我才了解了vb.net中的If()方法.
所以最后我写了一个函数,它返回适当的值(使用反射)来达到目的.但是那个方法(我写的)没有抛出任何异常.事实上,我能够检查函数内部类型的可空性.
Function ReturnValue(ByVal MyType As SomeType, ByVal PropertyName as String) As Object
If MyType Is Nothing Then Return String.Empty
Dim arrPropInfo As PropertyInfo() = MyType.GetType().GetProperties()
Return arrPropInfo.Where(Function(x) x.Name = PropertyName).Item(0).GetValue(MyType, Nothing)
End Function
Run Code Online (Sandbox Code Playgroud)
我的问题是,是否有一些内容写在Iif()内来抛出这样的错误? - NullReferenceException
If MyType Is Nothing Then Throw New NullReferenceException()
Run Code Online (Sandbox Code Playgroud)
或者这里有更大的工作吗?所以假设我想编写像iif这样的函数,如果参数列表中的某些内容为null,则抛出错误是上述方法的唯一方法吗?
区别在于?:并且If()是运营商. IIf()不是运营商; 这是一个简单的旧功能.你甚至可以自己实现它:
Public Shared Function IIf(ByVal Expression As Boolean, ByVal TruePart As Object, ByVal FalsePart As Object) As Object
If Expression Then Return TruePart Else Return FalsePart
End Function
Run Code Online (Sandbox Code Playgroud)
这意味着在调用函数之前必须评估传递给函数的所有参数,就像任何其他函数一样.IIF()内部没有任何内容抛出异常 - 它只是评估传递给函数的参数的正常过程.
您还需要注意,将null/Nothing传递给函数是完全可以的.您在代码中看到了异常,因为您传递的表达式具有无法计算的空引用 - 例如,如果您尝试使用空字符串变量的.Length属性.
另一方面,If()运算符没有这个问题,因为它只是:运算符而且,它是一个利用短路评估的运算符,因此只需要计算返回的表达式.如果()也具有类型安全的优点,尽管你也可以在通用的IIF(Of T)()函数中复制类型安全性,如果你想要的话.