"Не есть ничто" против "Не есть ничто"

Кто-нибудь из присутствующих здесь использует VB.NET и имеет сильные предпочтения за или против использования Not foo Is Nothing, а не foo IsNot Nothing? Если да, то почему?

Например

If var1 IsNot Nothing Then
...
End If

и

If Not var1 Is Nothing Then
...
End If

Я просто хочу знать, какой из них лучше?
Они оба одинаково приемлемы?


person nnnn    schedule 20.09.2013    source источник
comment
Я уже смотрел этот вопрос. Это сравнение IsNothing (obj) Между obj Is Nothing.   -  person nnnn    schedule 20.09.2013


Ответы (5)


В

If Not var1 Is Nothing Then

Это похмелье от VB6. Раньше не было IsNot, и поэтому это был единственный способ определить, не была ли переменная Nothing. В VB.NET это кажется избыточным.

person Paul Michaels    schedule 20.09.2013
comment
IsNot - новый оператор, которого не было в версиях до .NET2. - person Tim Schmelter; 23.04.2014
comment
Интересно, действительно ли он быстрее или компилируется так же. Я имею в виду, что Not x Is Nothing сначала проверяет равенство типов, а затем отменяет его. x IsNot Nothing выполняет только проверку на несоответствие типов, которую среда выполнения могла бы сделать быстрее (это глупо можно представить, как если бы она проверяла поле типа по полю и могла оставить первое несоответствующее поле, а не проходить через каждое поле, чтобы проверить равенство - наверху, чтобы в конечном итоге свести на нет результат). - person Ray; 12.10.2016

foo IsNot Nothing

Следующая строка взята из Visual Basic Coding Conventions Microsoft:

Используйте ключевое слово IsNot вместо _3 _... Is Nothing.

person Tony L.    schedule 30.03.2016

Я бы выбрал первый вариант - он читается как английский, и его легче понять / понять, чем второй. В остальном они эквивалентны.

person Tim Pietzcker    schedule 20.09.2013

Я нашел здесь похожий вопрос VB.NET - IsNothing vs. Is Nothing, где Я чувствую, что на этот вопрос дан исчерпывающий ответ. Среди ответов Джек Снайпс назвал http://weblogs.asp.net/psteele/410336, блог, который дает дополнительную информацию. Из тех, что я предпочитаю и использовал

IsNot Nothing

что также упрощает чтение и понимание моего кода.

person sav    schedule 03.05.2015
comment
Not ... Is Nothing - это не то же самое, что Not IsNothing (...) Не совсем неправильно, но не ответ на этот вопрос. - person EKW; 03.02.2016

Использование VB 7.0

If var1 Is Not Nothing Then

генерирует «ошибку недопустимого использования объекта» согласно этому " VBForums ".

If var1 IsNot Nothing Then

генерирует "Ошибка компиляции: Ожидается: Затем или GoTo"

If Not IsNothing(var1) Then

работал как чемпион

person MikeF    schedule 23.06.2016
comment
If var1 IsNot Nothing Then генерирует ошибку компиляции, конечно, если после этого нет оператора или блока. var1 IsNot Nothing сам будет работать. Вы также не можете показать, что делает Not var1 Is Nothing, поэтому вы не отвечаете на вопрос. И, пожалуйста, исправьте свое форматирование - person Breeze; 22.09.2016