我在一些使用if(Is.NotNull(SomeObject))而不是if(SomeObject!= null)的项目中遇到了一些代码。这两种方法有什么区别吗?何时使用特定方法而不是另一种方法,或者它只是一种风格选择?
答案 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(或未设置)。可能是如果未设置某些必须设置的属性,则它也将被视为空。