VB.NET“If”操作符是否导致拳击?
我们在VB / VB.NET中工作的人已经看到类似于这个可憎的代码:
Dim name As String = IIf(obj Is Nothing,"",obj.Name) 我说“可憎”有三个简单的原因: > IIf是一个函数,它们的所有参数都被评估;因此如果obj在上面的调用中没有,那么NullReferenceException将被抛出。对于习惯于C#语言的短路三元运算符的人来说,这是意想不到的行为。 ‘第二和第三个参数以及返回值’ 现在,在一些最新版本的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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |