Поскольку статическая версия метода .Equal
не упоминалась до сих пор, я хотел бы добавить это здесь, чтобы суммировать и сравнить 3 варианта.
MyString.Equals("Somestring")) //Method 1
MyString == "Somestring" //Method 2
String.Equals("Somestring", MyString); //Method 3 (static String.Equals method) - better
где MyString
это переменная, которая приходит откуда-то в коде.
Справочная информация и summerize:
В Java с помощью ==
для сравнения строк не должны использоваться. Я упоминаю об этом, если вам нужно использовать оба языка, а также , чтобы вы знали, что использование ==
также может быть заменено чем-то лучше на C#.
В C# нет практической разницы для сравнения строк с использованием метода 1 или метода 2 до тех пор, пока оба имеют строку типа.Однако, если один из них является нулевым, один имеет другой тип (например, целое число) или один представляет объект, который имеет другую ссылку, то, как показывает первоначальный вопрос, может возникнуть впечатление, что сравнение содержимого для равенства может не вернуть вы ожидаете.
Предлагаемое решение:
==
Поскольку использование не является точно такой же, как с помощью .Equals
при сравнении вещи, вы можете использовать статические 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
.
См. Также: http://stackoverflow.com/questions/144530/or-equals – Arrow
@ColonelPanic Silverlight классифицируется как «WPF везде», WPF построен на вершине .NET, и на вопрос используется C#, который является. NET. –
Строка переопределяет '==', но операторы не являются полиморфными. В этом коде оператор '==' вызывается в типе 'object', который сопоставляет идентификатор вместо значения. –