Используя == или Равняется для сравнения строк

На некоторых языках (например, C++) Вы не можете использовать операторы как == для сравнений строк, поскольку это сравнило бы адрес строкового объекта а не саму строку. Однако в C# можно использовать == для сравнения строк, и он на самом деле сравнит содержание строк. Но существуют также строковые функции для обработки таких сравнений, таким образом, мой вопрос; должны Вы?

Учитывая две строки:

string aa = "aa"; 
string bb = "bb";

Если Вы сравниваете их как это:

bool areEqual = (aa == bb); 

Или если Вы используете Равную функцию, как это:

bool areEqual = aa.Equals(bb); 

Есть ли так или иначе какое-либо техническое различие? Или разумные аргументы в пользу лучшей практики?

10
задан stiank81 28 December 2009 в 10:10
поделиться

5 ответов

Я бы не использовал:

aa.Equals(bb)

если бы я не знал aa не мог возможно быть нулевым. Я мог бы использовать:

string.Equals(aa,bb)

, но в основном я бы использовал то, что хотел бы использовать один из специфических StringComparison режимов (инвариантный, порядковый, нечувствительный к регистру и т.д.). Хотя я мог бы также использовать реализации StringComparer, так как их немного проще абстрагировать (например, перейти в Dictionary для нечувствительного к регистру порядкового словаря). Для общего использования

a == b

хорошо.

.
23
ответ дан 3 December 2019 в 13:29
поделиться

Технической разницы нет (если только aa не является нулевым). Используйте то, что выглядит лучше для вас. На мой взгляд, использование перегрузок операторов делает код более понятным.

Используйте функции, когда вам нужны (или могут понадобиться в будущем) их дополнительные аргументы (как в CompareTo())

.
2
ответ дан 3 December 2019 в 13:29
поделиться

Лучше всего всегда использовать функцию Equals() для сравнения строк. Это дает понять, когда кто-то другой читает ваш код, что вы конкретно хотите, чтобы строки сравнивались.

.
1
ответ дан 3 December 2019 в 13:29
поделиться

Это реализация оператора:

    public static bool operator == (String a, String b) {
       return String.Equals(a, b);
    }

Не теряйте из-за этого сон.

24
ответ дан 3 December 2019 в 13:29
поделиться

вообще говоря, == делает равенство указателей, в то время как .равно проверяет, равны ли атрибуты. Так что если вы сделали что-то вроде

a = 'a';
b = 'a';
bool c = (a == b);
bool d = (a.Equals(b))

то c должно возвращать false и d должно быть true.

.
-3
ответ дан 3 December 2019 в 13:29
поделиться
Другие вопросы по тегам:

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