加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-17 00:00:04 所属栏目:大数据 来源:网络整理
导读:我们在VB / VB.NET中工作的人已经看到类似于这个可憎的代码: Dim name As String = IIf(obj Is Nothing,"",obj.Name) 我说“可憎”有三个简单的原因: IIf是一个函数,它们的所有参数都被评估;因此如果obj在上面的调用中没有,那么NullReferenceException将
我们在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读