C# String.Contains()忽略大小写和区域性

C# String.Contains()忽略大小写和区域性,c#,windows-phone-7,C#,Windows Phone 7,我只找到了StringComparison,但这对Contains不起作用。 另一个必要的事情是忽略大小写,而“ä”应该等于“a”。这是a上的a。“ä”与“a”不同。如果要更改它,需要显式执行。内部string.Contains使用string.IndexOf传递StringComparison.Ordinal 因此,我认为您可以很容易地编写一个使用相同的Contains实现的方法 public bool CaseContains(string baseString, string textTo

我只找到了StringComparison,但这对Contains不起作用。
另一个必要的事情是忽略大小写,而“ä”应该等于“a”。

这是a上的a。“ä”与“a”不同。如果要更改它,需要显式执行。

内部
string.Contains
使用string.IndexOf传递
StringComparison.Ordinal

因此,我认为您可以很容易地编写一个使用相同的Contains实现的方法

public bool CaseContains(string baseString, string textToSearch, StringComparison comparisonMode)
{
    return (baseString.IndexOf(textToSearch, comparisonMode) != -1);
}
打电话给

if(CaseContains(myString, mySearch, StringComparison.CurrentCultureIgnoreCase))
  ....
这种方法的一个优雅演变是创建一个扩展方法

public static class StringExtensions
{
    public static bool CaseContains(this string baseString, string textToSearch, StringComparison comparisonMode)
    {
        return (baseString.IndexOf(textToSearch, comparisonMode) != -1);
    }
}
打电话给

if(myString.CaseContains(mySearch, StringComparison.CurrentCultureIgnoreCase))
   .....

此外,用
ae
替换
ä
和用
oe
替换
更为常见。如果他想去掉变音符号://“ä”和“a”不一样。通常它们是不一样的,但我需要这个用于产品搜索,所以我认为最好显示更多的结果。我相信,这是最优雅的解决方案。但是StringComparison.CurrentCultureIgnoreCasore没有将“ä”识别为“a”。真不敢相信我以前从未听说过CompareInfo类!我对这个解决方案持怀疑态度,但它确实正确地处理了I、İ、ı和I字符(将它们视为相同的字符)+1.
public static bool CustomContains(this string source, string toCheck)
{
        CompareInfo ci = new CultureInfo("en-US").CompareInfo;
        CompareOptions co = CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace;
        return ci.IndexOf(source, toCheck, co) != -1;
}