VB.NET - IsNothing против ничего
кто-нибудь здесь использует VB.NET и имеют сильное предпочтение или против использования IsNothing
в противоположность Is Nothing
(например, If IsNothing(anObject)
или If anObject Is Nothing...
)? Если да, то почему?
EDIT: если вы считаете, что они оба одинаково приемлемы, как вы думаете, лучше выбрать один и придерживаться его, или это нормально, чтобы смешать их?
9 ответов:
Если вы посмотрите на MSIL, когда он выполняется, вы увидите, что он не компилируется до одного и того же кода. Когда вы используете IsNothing (), он фактически вызывает этот метод, а не просто оценивает выражение.
причина, по которой я склоняюсь к использованию "ничего", заключается в том, что когда я отрицаю, это становится "не Ничто", а не" не IsNothing(объект)", который я лично чувствую, выглядит более читаемым.
Я считаю, что Патрик Стил лучше всего ответил на этот вопрос в своем блоге:Избегая IsNothing()
Я не копировал ни один из его ответов здесь, чтобы гарантировать, что Патрик Стил получит кредит за свой пост. Но я думаю, что если вы пытаетесь решить, использовать ли это ничего или нет, вы должны прочитать его сообщение. Я думаю, вы согласитесь, что ничего не является лучшим выбором.
Я согласен с "ничего". Как указано выше, легко отрицать с помощью "IsNot Nothing".
Я считаю, что это легче читать...
If printDialog IsNot Nothing Then 'blah End If
чем этот...
If Not obj Is Nothing Then 'blah End If
вы должны абсолютно избегать использования
IsNothing()
здесь 4 причины из статьи IsNothing () VS ничего
самое главное
IsNothing(object)
все передается ему как объект, даже типы значений! Поскольку типы значений не могут бытьNothing
, это совершенно впустую проверить.
Возьмем следующий пример:Dim i As Integer If IsNothing(i) Then ' Do something End If
это будет компилироваться и работать нормально, а это:
Dim i As Integer If i Is Nothing Then ' Do something End If
не будет компилироваться, вместо этого компилятор вызовет ошибку:
оператор'Is 'не принимает операнды типа'Integer'.
Операнды должны быть ссылочными или нулевыми типами.
IsNothing(object)
на самом деле является частью частиMicrosoft.VisualBasic.dll
.
Это нежелательно, так как у вас есть ненужная зависимость от библиотеки VisualBasic.его медленный-33.76% медленнее в факт (более 1000000000 итераций)!
возможно, личные предпочтения, но
IsNothing()
читается как Состояние Йода. Когда вы смотрите на переменную, вы проверяете ее состояние, и она является предметом вашего исследования.т. е. это do x? --- не и
x
ing свойство это?так я думаю
If a IsNot Nothing
читает лучше, чемIf Not IsNothing(a)
VB полон таких вещей, которые пытаются сделать его как "похожим на английский", так и удобным для людей, которые привыкли к языкам, которые используют () и {} много. Например, на стороне"like english"...VB имеет "не" ключевое слово...и нет, я не шучу. И с другой стороны, как вы уже, вероятно, знаете, большую часть времени вы можете использовать () с вызовами функций, если хотите, но не должны.
Я предпочитаю IsNothing()...но я использую C и C#, так что это именно то, что есть удобный. И я думаю, что это более читабельным. Но идите с тем, что чувствует себя более комфортно для вас.
Я склоняюсь к альтернативе "ничего", прежде всего потому, что она кажется более ОО.
Конечно Visual Basic не у Не сайта.