VB.NET – 没有什么比没有

有没有人在这里使用VB.NET,并有强烈的偏好或反对使用IsNothingIs 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的 四个原因

  1. 最重要的是, 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。

  2. IsNothing(object)实际上是Microsoft.VisualBasic.dll的一部分。
    这是不可取的,因为您对VisualBasic库有一个不需要的依赖项。

  3. 它的速度很慢,事实上比较慢了33.76%(超过10亿次迭代)!

  4. 也许个人偏好,但是没有IsNothing()像一个尤达条件 。 当你看一个variables时,你会检查它是否是状态,并将其作为调查对象。

    做x? — 不是 它的一个属性吗?

    所以我认为If a IsNot NothingIf 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一个可选参数是否已经通过时,这是很有用的。

Interesting Posts