Поскольку статическая версия метода .Equal
до сих пор не упоминалась, я хотел бы добавить это здесь, чтобы подвести итог и сравнить 3 варианта.
MyString.Equals("Somestring")) //Method 1
MyString == "Somestring" //Method 2
String.Equals("Somestring", MyString); //Method 3 (static String.Equals method) - better
где MyString
- это переменная, которая приходит из другого места в коде.
Справочная информация и подвести итог:
В Java использование ==
для сравнения строк не должно использоваться. Я упоминаю об этом в случае, если вам нужно использовать оба языка, а также
чтобы вы знали, что использование ==
также может быть заменено чем-то лучшим в C #.
В C # нет практической разницы для сравнения строк с использованием метода 1 или метода 2, если оба имеют тип string. Однако, если один равен нулю, другой имеет другой тип (например, целое число) или один представляет объект, имеющий другую ссылку, то, как показывает первоначальный вопрос, вы можете столкнуться с тем, что сравнение содержимого на равенство может не дать вы ожидаете.
Предлагаемое решение:
Поскольку использование ==
не совсем то же самое, что .Equals
при сравнении, вы можете использовать метод static String.Equals . Таким образом, если две стороны не одного типа, вы все равно будете сравнивать содержимое, а если одна будет нулевой, вы избежите исключения.
bool areEqual = String.Equals("Somestring", MyString);
Еще немного написать, но, на мой взгляд, безопаснее в использовании.
Вот некоторая информация, скопированная из Microsoft:
public static bool Equals (string a, string b);
Параметры
a
Строка
Первая строка для сравнения или null
.
b
Строка
Вторая строка для сравнения или null
.
Возвращает Boolean
true
, если значение a
совпадает со значением b
; в противном случае false
. Если a
и b
равны null
, метод возвращает true
.