Is.NotNull和!= null之间的区别

时间:2009-10-09 14:36:40

标签: c# .net

我在一些使用if(Is.NotNull(SomeObject))而不是if(SomeObject!= null)的项目中遇到了一些代码。这两种方法有什么区别吗?何时使用特定方法而不是另一种方法,或者它只是一种风格选择?

5 个答案:

答案 0 :(得分:5)

我已经看到Is.Not.Null是NUnit的一部分,以及来自Rhino.Mocks的Is.NotNull

一般来说,功能不会有任何不同 - Is.NotNull的目的只是为了更“流利”或自然地表达你的单元测试。关于测试的可读性有很多讨论,而且流利的语法背后的想法是,当你从左到右阅读它时,它形成一个描述代码行正在做什么的句子。

答案 1 :(得分:4)

样本中的Is类型不是我之前在基类库中看到的。这听起来像是贵公司或其他地方的人写的东西,可能是“流利”图书馆的一部分。

答案 2 :(得分:4)

如果SomeObject表达式的编译时类型过载,可以是一个细微的差别!=。我希望希望它最终不会有任何区别,假设一切都已经合理实施。

很难确切地知道这里发生了什么,因为Is.NotNull不是基类库的一部分,据我所知......这些项目是否使用了其他实用程序库?这些是单元测试还是生产代码?

答案 3 :(得分:1)

可能存在差异。如果SomeObject有一个等于/不等于重载,则可能因为这两个语句不同而被调用的原因不同:

if(x == null) ...

- 或 -

if(((object)x) == null) ...

后者将使用引用相等,而前者可能使用运算符重载。

答案 4 :(得分:0)

您可能需要查看Is.NotNull()并查看它是否在对象内部查看是否设置了任何值,例如。

对象可能被视为null,原因多于对象值实际为null(或未设置)。可能是如果未设置某些必须设置的属性,则它也将被视为空。