全局覆盖==运算符

use*_*741 3 c# string silverlight

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

string.Compare(a,b,StringComparison.CurrentCultureIgnoreCase)
Run Code Online (Sandbox Code Playgroud)

Jos*_*nig 5

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

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

然后你可以使用

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);
Run Code Online (Sandbox Code Playgroud)

作为一种深奥的替代方案,您可以使用Regex而不是String.Compare:

public static bool EqualsICRX(this string self, string string1) {
    return Regex.IsMatch(string1, "^" + self + "$", RegexOptions.IgnoreCase);
}
Run Code Online (Sandbox Code Playgroud)

  • 嗯......现在要记住的是,如果`self`为null,这段代码会抛出错误.如果您改为使用静态方法`string.Equals(self,...`,您将具有更类似于`==`运算符的行为,即空值不会导致错误. (2认同)