VB.NET – 没有什么比没有
有没有人在这里使用VB.NET,并有强烈的偏好或反对使用IsNothing
而Is Nothing
(例如, If IsNothing(anObject)
或If anObject Is Nothing...
)? 如果是这样,为什么?
编辑:如果你认为他们都是同样可以接受的,你认为最好挑一个并坚持下去,还是可以混合使用?
如果您在执行MSIL时看到它不会编译到完全相同的代码。 当你使用IsNothing()时,它实际上调用了该方法,而不是仅仅评估expression式。
我倾向于倾向于使用“不是什么”的原因是,当我否定它成为“不是什么”而不是“不是没有(对象)”,我个人觉得看起来更可读。
我发现Patrick Steele在他的博客上回答了这个问题: 避免IsNothing()
我没有在这里复制他的答案,以确保帕特里克斯蒂尔得到他的职位信贷。 但是我认为,如果你正在试图决定是否使用“无”或“无”,你应该阅读他的文章。 我想你会同意没有什么是最好的select。
我同意“没什么”。 如上所述,用“IsNot Nothing”很容易否定。
我觉得这更容易阅读…
If printDialog IsNot Nothing Then 'blah End If
比这个…
If Not obj Is Nothing Then 'blah End If
你应该绝对避免使用IsNothing()
下面是文章IsNothing()VS Is Nothing的 四个原因
-
最重要的是,
IsNothing(object)
将所有东西作为一个对象传递给它,甚至是值types! 由于值types不能是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
不会编译,而是编译器会提出错误:
“是”运算符不接受“整数”types的操作数。
操作数必须是引用或可为空的types。 -
IsNothing(object)
实际上是Microsoft.VisualBasic.dll
的一部分。
这是不可取的,因为您对VisualBasic库有一个不需要的依赖项。 -
它的速度很慢,事实上比较慢了33.76%(超过10亿次迭代)!
-
也许个人偏好,但是没有
IsNothing()
像一个尤达条件 。 当你看一个variables时,你会检查它是否是状态,并将其作为调查对象。即它做x? — 不是 它的一个属性吗?
所以我认为
If a IsNot Nothing
比If a IsNot Nothing
更好If Not IsNothing(a)
VB充满了这样的事情,试图使它“像英语”,并习惯于使用()和{}的语言很多的人舒适。 例如,在“像英文”一边… VB有“ 不是 ”关键字…不,我不是在开玩笑。 另一方面,正如你已经知道大部分时间你可以使用函数调用(),如果你想,但不必。
我更喜欢IsNothing()…但我使用C和C#,所以这就是舒适。 而且我认为它更具可读性。 但要随心所欲地去做任何事情。
我倾向于“无所谓”的select,主要是因为它似乎更多的OO。
当然Visual Basic 没有得到Is not关键字。
我也倾向于使用Is Nothing版本来部分地使用它,就像我在SQL中一样。
我最初使用IsNothing,但我一直在朝着更新的项目使用Is Nothing,主要是为了可读性。 我坚持使用IsNothing的唯一时间是如果我维护代码的地方,我一直使用,我想保持一致。
Nothing没有要求分配给Nothing值的对象。 IsNothing()可以接受任何尚未初始化的variables,包括数字types。 例如,在testing一个可选参数是否已经通过时,这是很有用的。