全局覆盖==运算符

时间:2012-02-13 19:23:56

标签: c# string silverlight

在很多地方,我正在使用==运算符来比较字符串,现在我知道这会考虑套管...无论如何,我可以调整文化设置以避免这种情况或者我是否必须去代码行并将其更改为

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

2 个答案:

答案 0 :(得分:5)

字符串扩展方法怎么样?:

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 :(得分:1)

字符串上的

==从不考虑文化,所以你必须改变它。

字符串==实际上是基于代码点上的 完成的,因此字符串即使看起来相同也可能不同(例如,如果一个人组成了字符而另一个人已经分解了)。一般来说,你想要一个更复杂的“平等”概念。

"é" == "é"
== False