Кто-нибудь здесь использует VB.NET и имеет сильные предпочтения за или против использования IsNothing
в отличие от Is Nothing
(например, If IsNothing(anObject)
или If anObject Is Nothing...
)? Если так, то почему?
РЕДАКТИРОВАТЬ: Если вы считаете, что они оба одинаково приемлемы, как вы думаете, лучше всего выбрать один и придерживаться его, или можно их смешать?
IsNothing()
Ответы:
Если вы посмотрите на MSIL во время его выполнения, вы увидите, что он не компилируется до того же самого кода. Когда вы используете IsNothing (), он фактически вызывает этот метод, а не просто вычисляет выражение.
Причина, по которой я склоняюсь к использованию «Is Nothing», заключается в том, что когда я отрицаю, это становится «IsNot Nothing», а не «Not IsNothing (объект)», что, по моему мнению, выглядит более читаемым.
источник
Я считаю, что Патрик Стил лучше всего ответил на этот вопрос в своем блоге: Avoiding IsNothing ()
Я не копировал здесь ни одного его ответа, чтобы гарантировать, что Патрик Стил заслужил признание своей должности. Но я думаю, что если вы пытаетесь решить, использовать ли Is Nothing или IsNothing, вам следует прочитать его пост. Думаю, вы согласитесь, что Is Nothing - лучший выбор.
Изменить - комментарий VoteCoffe здесь
Частичное содержание статьи: Изучив дополнительный код, я обнаружил еще одну причину, по которой этого следует избегать: он принимает типы значений! Очевидно, поскольку IsNothing () - это функция, которая принимает «объект», вы можете передать ей все, что захотите. Если это тип значения, .NET поместит его в объект и передаст в IsNothing - который всегда будет возвращать false для упакованного значения! Компилятор VB.NET проверит синтаксис стиля «Is Nothing» и не будет компилировать, если вы попытаетесь сделать «Is Nothing» для типа значения. А вот функция IsNothing () компилируется без нареканий. -PSteele - ГолосоватьКофе
источник
Вы должны категорически избегать использования
IsNothing()
Вот 4 причины из статьи IsNothing () VS Is Nothing
Самое главное,
IsNothing(object)
все ли передано ему как объект, даже типы значений! Поскольку типов значений не может бытьNothing
, это напрасная проверка.Возьмите следующий пример:
Это будет компилироваться и работать нормально, тогда как это:
Компилировать не будет, вместо этого компилятор выдаст ошибку:
IsNothing(object)
фактически является частьюMicrosoft.VisualBasic.dll
.Это нежелательно, так как у вас есть ненужная зависимость от библиотеки VisualBasic.
Это медленно - на самом деле на 33,76% медленнее (более 1000000000 итераций)!
Возможно личное предпочтение, но
IsNothing()
читается как условие Йоды . Когда вы смотрите на переменную, вы проверяете ее состояние и рассматриваете ее как предмет вашего исследования.т.е. делает ли он x? --- НЕ ли
x
ИНГИ свойства него ?Так что я думаю, что
If a IsNot Nothing
лучше, чемIf Not IsNothing(a)
источник
Я согласен с "Нет ничего". Как было сказано выше, легко отрицать «IsNot Nothing».
Мне это легче читать ...
чем это...
источник
VB полон подобных вещей, пытаясь сделать его «похожим на английский» и удобным для людей, которые привыкли к языкам, которые часто используют () и {}. Например, на стороне "как английский" ... VB имеет ключевое слово " Ain't " ... и нет, я не шучу. И с другой стороны, как вы, вероятно, уже знаете, большую часть времени вы можете использовать () с вызовами функций, если хотите, но не обязательно.
Я предпочитаю IsNothing () ... но использую C и C #, так что это как раз то, что удобно. И мне кажется, это более читабельно. Но выбирайте то, что вам удобнее.
источник
Я склоняюсь к альтернативе «Нет ничего», в первую очередь потому, что она кажется более объектно ориентированной.
Конечно , Visual Basic не получил ли не ключевое слово.
источник
Я также склонен частично использовать версию Is Nothing из-за того, что использую ее так же часто, как в SQL.
источник
Изначально я использовал IsNothing, но постепенно перехожу к использованию Is Nothing в новых проектах, в основном для удобства чтения. Единственный раз, когда я придерживаюсь IsNothing, это если я поддерживаю код, в котором он используется повсюду, и хочу оставаться последовательным.
источник
Is Nothing требует объекта, которому присвоено значение Nothing. IsNothing () может принимать любую переменную, которая не была инициализирована, в том числе числового типа. Это полезно, например, при проверке передачи необязательного параметра.
источник
Nothing
Is Nothing