没有人在这里用VB.NET和有强烈的偏好支持或反对IsNothing
,而不是Is Nothing
(例如,If IsNothing(anObject)
或If anObject Is Nothing...
)?如果是这样,为什么?
编辑:如果您认为它们都同样可以接受,您是否认为最好选择一个并坚持使用,还是可以将它们混合在一起?
没有人在这里用VB.NET和有强烈的偏好支持或反对IsNothing
,而不是Is Nothing
(例如,If IsNothing(anObject)
或If anObject Is Nothing...
)?如果是这样,为什么?
编辑:如果您认为它们都同样可以接受,您是否认为最好选择一个并坚持使用,还是可以将它们混合在一起?
Answers:
我发现帕特里克·斯蒂尔在他的博客上回答了这个问题最好:避免IsNothing()
为了确保帕特里克·斯蒂尔(Patrick Steele)的职位受到赞誉,我没有在此处复制他的任何答案。但是我确实认为,如果您要尝试确定是否使用“无”或“无”,则应阅读他的文章。我认为您会同意“无为”是最佳选择。
编辑-VoteCoffe的评论在这里
部分文章内容:查看更多代码后,我发现另一个应避免的原因:它接受值类型!显然,由于IsNothing()是一个接受“对象”的函数,因此您可以将任何想要的东西传递给它。如果是值类型,.NET会将其装箱成一个对象,然后将其传递给IsNothing,该值始终对装箱的值返回false!VB.NET编译器将检查“ Is Nothing”样式的语法,如果尝试对值类型执行“ Is Nothing”,则不会编译。但是IsNothing()函数的编译没有任何抱怨。-PSteele –投票咖啡
IsNothing()
这是文章IsNothing()VS 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()
读起来像尤达条件。当您查看变量时,您正在检查其状态,并将其作为调查的主题。
即它做x吗?--- 不要是x
荷兰国际集团的性质是?
所以我认为If a IsNot Nothing
读起来比If Not IsNothing(a)
VB充满了这样的事情,试图使它既“像英语”又让习惯于经常使用()和{}的语言的人感到满意。例如,在“ like english”方面,VB的关键词是 “ Ai n't ”……不,我不是在开玩笑。另一方面,您可能已经知道大多数时间都可以将()与函数调用结合使用,但是不必这样做。
我更喜欢IsNothing()...但是我使用C和C#,所以这很舒服。而且我认为它更具可读性。但是,无论您觉得哪种感觉都更舒适。
我最初使用IsNothing,但是我一直在较新的项目中使用Is Nothing,主要是为了提高可读性。我唯一坚持使用IsNothing的方法是,如果我要维护始终使用的代码,并且希望保持一致。
Is Nothing要求将一个对象分配给值Nothing。IsNothing()可以接受任何尚未初始化的变量,包括数字类型。例如,在测试是否已传递可选参数时,这很有用。
Nothing
Is Nothing
IsNothing()