VB.NET“If”操作符是否导致拳击?

前端之家收集整理的这篇文章主要介绍了VB.NET“If”操作符是否导致拳击?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们在VB / VB.NET中工作的人已经看到类似于这个可憎的代码
Dim name As String = IIf(obj Is Nothing,"",obj.Name)

我说“可憎”有三个简单的原因:

> IIf是一个函数,它们的所有参数都被评估;因此如果obj在上面的调用中没有,那么NullReferenceException将被抛出。对于习惯于C#语言的短路三元运算符的人来说,这是意想不到的行为。
因为IIf是一个函数,所以它会引起函数调用的开销。再一次,尽管这不是一件大事,但是对于那些期望它可以作为语言固有的三元操作的人来说,这并不是正确的。
> IIf是非泛型,因此接受Object类型的参数,这意味着以下调用框(我相信)总共有三个整数:

‘第二和第三个参数以及返回值’
Dim值As Integer = IIf(条件,1,-1)

现在,在一些最新版本的VB.NET(我不知道这个数字是多少),If操作符被引入,它的工作原理与IIf功能完全相同,但是(如我所理解的)没有相同的缺点。也就是说,它确实提供短路,这是一个内部的VB操作。但是,我不知道最后一部分。 MSDN documentation似乎没有指示是否将其参数括起来。有人知道吗?

主要的是你正确地识别出新的If作为一个操作符而不是一个函数。它也是类型安全的,因此不需要拳击,并且是直接映射到条件/三元/?运算符在C/C++ / C#/ Java / etc中

即使没有新的运算符,您可以使用以下代码在VB.Net中获得一些改进:

Public Shared Function IIf(Of T)(ByVal Expression As Boolean,ByVal TruePart As T,ByVal FalsePart As T) As T
    If Expression Then Return TruePart Else Return FalsePart
End Function
原文链接:https://www.f2er.com/vb/256048.html

猜你在找的VB相关文章