任何人都不会在这里使用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是什么

  1. 最重要的是, 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'.
    操作数必须参考或可空的类型。

  2. IsNothing(object) 实际上是的一部分的一部分 Microsoft.VisualBasic.dll.
    这是不希望你有一个不需要依赖的visual Basic图书馆。

  3. 其缓慢33.76%慢实际上(在1000000000迭代)!

  4. 也许是个人的偏好,但是 IsNothing() 读起来像 尤达大师的条件.当你看着一个可变你检查它的国家,与它作为主题的调查。

    即做 它的 做x?--- xing一个酒店的 它的?

    所以我觉得 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()可以采取任何可变的,没有被初始化,包括数字类型。这是有用的,例如在测试时,如果一个可选择的参数已经过去了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top