VB.NET IsNot для сравнения строк - PullRequest
2 голосов
/ 12 октября 2010
If Object.Value IsNot "Something" Then

Можете ли вы сделать это, или есть определенные случаи, когда это не будет работать? Не был уверен, следует ли использовать это только для целых и логических значений.

Спасибо! * * 1004

Ответы [ 3 ]

5 голосов
/ 12 октября 2010

Я не уверен, работает ли это или нет, но если это произойдет, это будет очень плохая идея для использования.Операторы Is и IsNot в VB.Net выполняют сравнительные сравнения.При работе со значениями String вы почти всегда хотите выполнять сравнение значений, которое выполняется с помощью = и <>.

. Сравнительные сравнения говорят вам, указывает ли он буквально на один и тот же объект.В .Net очень возможно, что одна и та же одинаковая строка будет захвачена в 2-х объектах, что допускает запутанные случаи, подобные следующему

Function CreateFoo() As String
  return "foo"
End Function

Dim str1 = "foo"
Dim str2 = CreateFoo()
if str1 Is str2 Then
  ' This is possible
Else
  ' This is also possible
End If

Сравнение значений обеспечивает гораздо больше здравого смысла здесь

Dim str1 = "foo"
Dim str2 = CreateFoo()
if str1 = str2 Then
  ' This will run
Else
  ' This is simply not possible
End If
3 голосов
/ 12 октября 2010

То есть вы узнаете, являются ли Object.Value и «Something» буквально одним и тем же объектом.

99,999% времени, вас это не волнует.Все, что вас волнует, это если они семантически равны, то есть они оба содержат слово «Нечто».

1 голос
/ 12 октября 2010

Из документации: «Оператор IsNot определяет, ссылаются ли две ссылки на объекты на разные объекты».

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...