题
任何人都不会在这里使用VB.NET 并有一个强烈的偏好或者对使用 IsNothing
作为反对 Is Nothing
(例如, If IsNothing(anObject)
或 If anObject Is Nothing...
)?如果是这样,为什么?
编辑:如果你认为他们都同样可以接受的,你认为这是最佳选择一个和坚持使用它,或者是"确定"混合他们?
解决方案
如果你看看集,因为它是正在执行的你会看到,它没有编到完全相同的代码。当你使用IsNothing()它实际上使一个呼吁的方法,而不是仅仅评估的表达。
原因我往往倾向于使用"什么"是当我否定它变得"不没什么',而不是"不IsNothing(object)"这是我个人觉得看起来更具可读性。
其他提示
我发现, 帕特里克*斯蒂尔 回答这个问题最好在他的博客: 避免IsNothing()
我没有复制任何他的答案在这里,以确保帕特里克*斯蒂尔得到的信用他的职位。但我觉得如果你想决定是否使用的是什么或IsNothing你应该读读他的岗位。我认为,你会同意的是没有什么是最好的选择。
编辑-VoteCoffe的评论在这里
部分的文章内容:审查后,更多的代码,我发现了另一个原因你应该避免这样的:它可以接受的价值类型!显然,由于IsNothing()是一个功能接受的"对象",你可以通过任何你想要它。如果这是一个值的类型.净将盒子为对象,并通过它向IsNothing--这将一直return false on装箱的价值!的VB.NET 编译器会检查所"是什么"的风格的语法和不译,如果你尝试做一个"什么"在值的类型。但IsNothing()function汇编没有投诉。-PSteele–VoteCoffee
你绝对应该避免使用 IsNothing()
这里是 4原因 从这篇文章 IsNothing()VS是什么
最重要的是,
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
不会编制,而不是编译器将提高的错误:
'是'操作者不接受的操作数类型的'Integer'.
操作数必须参考或可空的类型。IsNothing(object)
实际上是的一部分的一部分Microsoft.VisualBasic.dll
.
这是不希望你有一个不需要依赖的visual Basic图书馆。其缓慢33.76%慢实际上(在1000000000迭代)!
也许是个人的偏好,但是
IsNothing()
读起来像 尤达大师的条件.当你看着一个可变你检查它的国家,与它作为主题的调查。即做 它的 做x?--- 不 是
x
ing一个酒店的 它的?所以我觉得
If a IsNot Nothing
读取比If Not IsNothing(a)
我同意"是什么"。如上所述,很容易到否定与"不是什么"。
我找到这种更易于阅读...
If printDialog IsNot Nothing Then
'blah
End If
比这个...
If Not obj Is Nothing Then
'blah
End If
VB全之类的东西,试图使这两个"就像英语的"和舒适的人使用语言的使用()并{}很多。例如,在"等语"。VB有的"是不是"关键字...不,我不是在开玩笑。而在另一边,因为你已经大概知道大多数时间你可以使用()function电话如果你想要,但不必。
我更喜欢IsNothing()...但我的使用C和C#所以这只是什么是舒适。我认为这是更具可读性。但去有什么感觉更舒服你。
我倾向于"没有"替代方案,主要是因为它似乎更OO。
当然Visual Basic 是不是 得了不是关键字。
我也倾向于使用的是什么版本部分地从使用它,就像我在SQL。
我最初使用IsNothing但我已经朝着使用是什么,在较新的项目,主要用于的可读性。唯一的时间,我坚持IsNothing是如果我维持的代码在哪里使用的整个和我想保持一致。
是没有什么需要一个目已分配的价值什么都没有。IsNothing()可以采取任何可变的,没有被初始化,包括数字类型。这是有用的,例如在测试时,如果一个可选择的参数已经过去了。