Перезаписать оператор == глобально - PullRequest
3 голосов
/ 13 февраля 2012

Во многих местах я использую оператор == для сравнения строки, теперь я знаю, что это относится к регистру ... Есть ли в любом случае, я могу настроить параметры культуры, чтобы избежать этого, или я должен идти к каждому строка кода и измените его на

string.Compare(a,b,StringComparison.CurrentCultureIgnoreCase)

Ответы [ 2 ]

5 голосов
/ 13 февраля 2012

Как насчет метода расширения строки?:

public static class StringExtensions {
    public static bool EqualsIC(this string self, string string1) {
        return self.Equals(string1, StringComparison.InvariantCultureIgnoreCase);        
    }
}

Тогда вы можете просто использовать

string string1 = "Hello world";
string string2 = "hEllO WOrLD";
bool theymatch = string1.EqualsIC(string2);

// OR (per TimS' comment) - to avoid error if string1 is null
theymatch = StringExtensions.EqualsIC(string1, string2);

В качестве эзотерической альтернативы вы можете использовать Regex вместо String.Compare:

public static bool EqualsICRX(this string self, string string1) {
    return Regex.IsMatch(string1, "^" + self + "$", RegexOptions.IgnoreCase);
}
1 голос
/ 13 февраля 2012

== в строках никогда не учитывает культуру, поэтому вы должны изменить ее.

String == на самом деле выполняется на основе только на кодовых точках, поэтому строки могут отличаться, даже если они выглядят одинаково (например, если один состоит из символов, а другой разлагается). Как правило, вам нужно более сложное понятие «равенство».

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