2013-04-26 56 views

回答

4

内部string.Contains使用string.IndexOf传递StringComparison.Ordinal
所以,我认为,你可以很容易地编写使用相同的实现包含

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); 
    } 
} 

and call with

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

我相信,这是最优雅的解决方案。但StringComparison.CurrentCultureIgnoreCaseare不认可“ä”为“a”。 – 2013-04-27 11:58:32

1

这就是一个umlaut过了一个。 “ä”与“a”不一样。如果你想改变它,你需要明确地做。

+1

另外,用'ae'和'ö'替换'o'更常见,用'oe'等。 http://stackoverflow.com/questions/1271567/how-do-i-replace-accents-german-in-net如果他想删除变音符:http://stackoverflow.com/a/7471047/284240 – 2013-04-26 22:40:23

+2

//“ä”与“a”不同。 通常他们是不一样的,但我需要这个产品搜索,所以它更好地显示更多的结果,我认为。 – 2013-04-26 22:51:25

5
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; 
} 
+0

不能相信我以前从来没有听说过CompareInfo类! – 2016-04-27 09:39:23