<> А Не В VB.NET

java -d64 -Xms512m -Xmx4g HelloWorld

где, -d64: активирует 64-битный JVM -Xms512m: установит размер начальной кучи как 512 МБ -Xmx4g: установит максимальный размер кучи как 4 GB (здесь имя java-файла: HelloWorld.java)

22
задан Charlie 28 July 2009 в 12:31
поделиться

8 ответов

Я всегда использовал следующее:

If Request.QueryString("MyQueryString") IsNot Nothing Then

, Но только потому, что синтаксически это читает лучше.

При тестировании на допустимую запись QueryString я также использую следующее:

If Not String.IsNullOrEmpty(Request.QueryString("MyQueryString")) Then

Это просто методы, которые я всегда использовал так, я не мог выровнять по ширине их использование кроме, они имеют большую часть смысла мне при чтении назад кода.

31
ответ дан Jonesopolis 29 November 2019 в 04:12
поделиться

Is не то же, поскольку = - Is сравнивает ссылки, пока = сравнит значения.

, Если Вы используете v2.Net Framework (или позже), существует IsNot оператор, который будет делать правильную вещь и читать более естественно.

10
ответ дан Rowland Shaw 29 November 2019 в 04:12
поделиться

Я думаю, что Ваш вопрос сводится к "различию между (Is и =) и также (IsNot и <>)".

ответ в обоих случаях является тем же:

= и <> неявно определяются для типов значения, и можно явно определить их для типов.

Is и IsNot разработаны для сравнений между ссылочными типами, чтобы проверить, относятся ли эти две ссылки к тому же объекту.

В Вашем примере, Вы ни с Чем сравниваете строковый объект (Пустой указатель) и начиная с = / <>, операторы определяются для строк, первых работ в качестве примера. Однако это не работает, когда с Пустым указателем встречаются, потому что Строки являются ссылочными типами и могут быть Пустыми. Лучшим путем (как Вы предположили) является последняя версия с помощью Is / IsNot.

9
ответ дан Cerebrus 29 November 2019 в 04:12
поделиться

Вот технический ответ (подробно останавливающийся на ответе Rowland Shaw).

Эти проверки ключевого слова, являются ли эти два операнда ссылками на ту же объектную память, и только возвращает true, если это верно. Я полагаю, что это функционально эквивалентно Объект. ReferenceEquals. ключевое слово IsNot является просто кратким синтаксисом для записи Not ... Is ..., ничто больше.

= (равенство) оператор сравнивает значения, и в этом случае (как во многих других) эквивалентно Строка. Равняется . Теперь, <> (неравенство) оператор действительно не совсем имеет ту же аналогию, как эти и ключевые слова IsNot , так как это может быть переопределено отдельно от = оператор в зависимости от класса. Я полагаю, что случай должен всегда быть то, что это возвращает логическую инверсию = оператор (и конечно в случае Строки), и просто допускает более эффективное сравнение со сделанным при тестировании на неравенство, а не равенство.

При контакте со строками, если Вы на самом деле не означаете сравнивать ссылки, всегда использование = оператор (или Строка. Равняется я предполагаю). В Вашем случае, потому что Вы тестируете на пустой указатель ( Ничто ), кажется, что необходимо использовать эти , , или ключевое слово IsNot (оператор равенства перестанет работать, потому что он не может сравнить значения несуществующих объектов). Синтаксически, ключевое слово IsNot немного более хорошо здесь, поэтому пойдите с этим.

1
ответ дан Noldorin 29 November 2019 в 04:12
поделиться

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

0
ответ дан luiscubal 29 November 2019 в 04:12
поделиться

Если необходимо знать, существует ли переменная использование Is/IsNot Ничто.

Используя <> требует, чтобы переменная, которую Вы оцениваете, имела "<>" оператор определяется. Выезд

 Dim b As HttpContext
 If b <> Nothing Then
    ...
 End If

и результирующая погрешность

Error   1   Operator '<>' is not defined for types 'System.Web.HttpContext' and 'System.Web.HttpContext'.   
0
ответ дан hometoast 29 November 2019 в 04:12
поделиться

На самом деле Is действительно хорош, так как разработчикам вы можете переопределить оператор ==, чтобы сравнить со значением. скажем, у вас есть класс A, оператор == из A, чтобы сравнить некоторые поля A с параметром. тогда у вас будут проблемы в c #, чтобы проверить, является ли объект A нулевым, с помощью следующего кода,

    A a = new A();
...
    if (a != null)
it will totally wrong, you always need to use if((object)a != null)
but in vb.net you cannot write in this way, you always need to write
    if not a is nothing then
or
    if a isnot nothing then

, который, как сказал Кристиан, vb.net ничего не «ожидал».

0
ответ дан aizaz 29 November 2019 в 04:12
поделиться

Компиляторы C # и VB.NET часто генерируют разные IL для операций, которые явно эквивалентны на обоих языках . Так уж получилось, что C # делает «ожидаемый» вещь, когда вы пишете stringvar == null , но VB.NET этого не делает. Чтобы получить тот же эффект в VB.NET, вы должны принудительно установить истинное равенство ссылок с помощью оператора Is .

0
ответ дан 29 November 2019 в 04:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: