2009-10-09 2 views
0

Я столкнулся с некоторым кодом в нескольких проектах, которые используют if (Is.NotNull (SomeObject)) вместо if (SomeObject! = Null). Есть ли разница между этими двумя методами? Когда можно использовать конкретный метод над другим, или это просто выбор стиля?Разница между Is.NotNull и! = Null

ответ

5

Я видел Is.Not.Null как часть NUnit, а также Is.NotNull от Rhino.Mocks.

Как правило, функциональность не будет отличаться - пустушка Is.NotNull предназначена только для того, чтобы выражать ваши модульные тесты более «плавно» или, естественно. Было много разговоров о читаемости тестов, и идея свободного синтаксиса заключается в том, что когда вы читаете его слева направо, он формирует предложение, описывающее, что делает строка кода.

+0

Интересно ... Я подозреваю, что именно по этой причине он был создан, хотя, возможно, он не должен был быть помещен в пространство имен System. Спасибо за понимание. – tbreffni

+0

Согласен ... версия NUnit крайне раздражает. Если вы используете NUnit и Rhino вместе, это отстой, чтобы полностью квалифицировать все. – womp

4

Тип Is в вашем образце - это не то, что я видел раньше в библиотеке базового класса. Это звучит как что-то, написанное кем-то в вашей компании или в другом месте, возможно, как часть «свободной» библиотеки.

4

Там может быть тонкой разницей, если тип времени компиляции выражения SomeObject перегружен! =. Я бы надежда это не имело бы никакого значения в конце, хотя, предполагая, что все реализовано разумно.

Трудно точно знать, что здесь происходит, поскольку Is.NotNull не является частью библиотеки базового класса, насколько мне известно ... эти проекты используются с использованием какой-либо другой библиотеки утилит? Являются ли они в модульных тестах или производственном коде?

+0

Ах, вы правы, это не часть библиотеки базового класса, это часть пользовательской внешней сборки, которую мы имеем здесь. Этот метод был реализован в классе «Is» в пространстве имен System, что привело к тому, что он был частью BCL. Спасибо за вашу помощь! – tbreffni

0

Возможно, вам нужно посмотреть Is.NotNull() и посмотреть, не выглядит ли он внутри объекта, чтобы определить, есть ли у него какие-либо значения, например.

Возможно, что объект считается нулевым по нескольким причинам, чем значение объекта, фактически являющееся нулевым (или не установленным). Может быть, если некоторые атрибуты не установлены, которые должны быть установлены, то он также будет считаться нулевым.

1

Вероятно, есть разница. Если SomeObject имеет равенства/не равно не перегружать его не может быть названо по той же причине эти два утверждения различны:

if(x == null) ... 

- или -

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

Чем позже будет использовать равенство ссылок, в то время как первый может использовать перегрузку оператора.

Смежные вопросы