有人在这里使用VB.NET并且对使用IsNothing
和Is Nothing
有强烈偏好的吗?例如:If IsNothing(anObject)
或If anObject Is Nothing...
)?如果是这样,为什么?
编辑:如果您认为它们都同样可接受,您是否认为最好选择一个并坚持使用它,还是将它们混合使用也可以?
我发现Patrick Steele在他的博客上最好地回答了这个问题:避免使用IsNothing()
我没有在这里复制他的答案,以确保Patrick Steele得到他的文章的荣誉。但是我认为,如果你试图决定是否使用Is Nothing或IsNothing,你应该阅读他的文章。我认为你会同意Is Nothing是最好的选择。
编辑 - VoteCoffe的评论在此处
部分文章内容:在查看更多代码后,我发现另一个原因,你应该避免使用它:它接受值类型!显然,由于IsNothing()是一个接受“对象”的函数,你可以传递任何你想要的东西给它。如果是一个值类型,.NET将把它封装成一个对象并将其传递给IsNothing——它将总是在一个装箱的值上返回false!VB.NET编译器将检查“Is Nothing”样式语法,并且如果你试图在一个值类型上执行“Is Nothing”,则不会编译。但IsNothing()函数编译时没有投诉.-PSteele - VoteCoffee
IsNothing()
以下是来自文章IsNothing() VS Is Nothing的4个理由
最重要的是,IsNothing(object)
将所有传递给它的内容都视为对象,包括值类型!由于值类型不能为Nothing
,因此这是一个完全浪费的检查。
以下是一个示例:
Dim i As Integer
If IsNothing(i) Then
' Do something
End If
这将编译并成功运行,而以下代码则无法:
Dim i As Integer
If i Is Nothing Then
' Do something
End If
代码无法编译,编译器会引发错误:
'Is' 运算符不接受 'Integer' 类型的操作数。
操作数必须是引用类型或可空类型。
IsNothing(object)
实际上是 Microsoft.VisualBasic.dll
的一部分。
这是不可取的,因为您有一个不必要的依赖于 VisualBasic 库。
它很慢 - 实际上比其他方法慢了 33.76%(在 1000000000 次迭代中)!
这可能是个人喜好,但是 IsNothing()
看起来像 Yoda Condition。当你查看变量时,你正在检查它的状态,将其作为调查的主题。
例如:它是否执行 x?--- 不是“x”是它的属性吗?
所以我认为 If a IsNot Nothing
读起来比 If Not IsNothing(a)
更好。
我同意 "Is Nothing"。如上所述,使用 "IsNot Nothing" 可以轻松否定它。
我发现这样更易于阅读...
If printDialog IsNot Nothing Then
'blah
End If
比这更...
If Not obj Is Nothing Then
'blah
End If
VB充满了这样的东西,试图使其既“像英语”,又适合那些习惯于使用()和{}的语言的人感到舒适。
而另一方面,正如您可能已经知道的那样,大多数情况下,如果您愿意,可以在函数调用中使用(),但不必这样做。
我更喜欢使用IsNothing()... 但我使用C和C#,所以这只是让我感觉舒适的东西。 我认为这样更易读。 但是请随心所欲选择您感觉更舒适的方式。
我倾向于使用“Is Nothing”这个选择,主要是因为它看起来更面向对象。
毫无疑问,Visual Basic 没有Ain't关键字。
我最初使用了IsNothing,但在新项目中,我已经开始使用Is Nothing,主要是为了可读性。唯一坚持使用IsNothing的情况是,如果我正在维护使用该方法的代码,并且我想保持一致性。
IsNothing()
有很多好理由。 - KyleMit