String.Contains()忽略大小写和文化

Vit*_*nko 2 c# windows-phone-7

我只找到了StringComparison,但这对于Contains不起作用.另一个必要的事情是忽略案例,而"ä"应该等同于"a".

Joa*_*eme 6

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


Ste*_*eve 5

在内部string.Contains使用string.IndexOf传递一个StringComparison.Ordinal.
所以我认为你可以轻松编写一个使用相同的Contains实现的方法

public bool CaseContains(string baseString, string textToSearch, StringComparison comparisonMode)
{
    return (baseString.IndexOf(textToSearch, comparisonMode) != -1);
}
Run Code Online (Sandbox Code Playgroud)

并打电话给

if(CaseContains(myString, mySearch, StringComparison.CurrentCultureIgnoreCase))
  ....
Run Code Online (Sandbox Code Playgroud)

这种方法的优雅演变是创建一种扩展方法

public static class StringExtensions
{
    public static bool CaseContains(this string baseString, string textToSearch, StringComparison comparisonMode)
    {
        return (baseString.IndexOf(textToSearch, comparisonMode) != -1);
    }
}
Run Code Online (Sandbox Code Playgroud)

并打电话给

if(myString.CaseContains(mySearch, StringComparison.CurrentCultureIgnoreCase))
   .....
Run Code Online (Sandbox Code Playgroud)

  • 我相信,这是最优雅的解决方案.但StringComparison.CurrentCultureIgnoreCaseare并未将"ä"视为"a". (2认同)