在C#中忽略大小写并进行比较

17

如何在执行比较之前将字符串转换为大写,或者是否可以忽略大小写比较字符串

 if (Convert.ToString(txt_SecAns.Text.Trim()).ToUpper() == 
     Convert.ToString(hidden_secans.Value).ToUpper())

你的代码与本地环境相关。你确定需要这样吗? - CodesInChaos
10个回答

32

20

3
利用土耳其文化,这段代码可以使STRINGAstringa返回false。虽然提问者可能是希望这样的结果,但需要注意文化对于大小写不敏感比较的影响。 - CodesInChaos
2
如果您希望它是文化不变的,请使用此string.Equals("stringa", "stringb", StringComparison.InvariantCultureIgnoreCase) - Fischermaen
这和 StringComparison.OrdinalIgnoreCase 有什么区别? - PatPeter

5

好的,您可以使用String.Equals(String,StringComparison)方法。只需要根据您的目标传递StringComparison.InvariantCultureIgnoreCaseStringComparison.CurrentCultureIgnoreCase即可...


4

来自MSDN

String.Compare方法(String,String,Boolean):

public static int Compare(
    string strA,
    string strB,
    bool ignoreCase
)

所以在你的情况下:
if( String.Compare(txt_SecAns.Text.Trim(), hidden_secans.Value, true) == 0) 

3

string.Compare(string1, string2, true) == 0将比较这两个字符串是否相等,忽略大小写


3

就像这样:

if (string.Compare(txt_SecAns.Text.Trim(), hidden_secans.Value.ToString(), true) == 0)
{
    // DoSomething
}

第三个参数 true 告诉 string.Compare 忽略大小写。

3
txt_SecAns.Trim().Compare(hidden_secans.Trim(), StringComparison.CurrentCultureIgnoreCase)

3
使用 StringComparison.CurrentCultureIgnoreCase:
if (txt_SecAns.Text.Trim().Equals(hidden_secans.Value.ToString(), StringComparison.CurrentCultureIgnoreCase))

3
String.Compare(str1, str2, true);

我更喜欢一种明确指定文化的方法。这并不明显地使用当前文化。 - CodesInChaos
是的,根据MSDN,这个版本使用当前文化。有一个重载函数带有第四个参数,可以显式地指定文化。 - Tudor

2

我个人会将其与适当的文化进行比较,但还有一些尚未被提出:

public bool CompareStrings(string stringA, string StringB)
{
    return stringA.ToLower() == stringB.ToLower();
}

我认为,使用相同文化的不区分大小写比较器仍然可能与此产生不同的结果。 - CodesInChaos
可以这样做,但我认为它能解决你指出的土耳其文化问题吗? - Tipx
1
在土耳其系统上,"I".ToLower()!="i".ToLower() - CodesInChaos
哦,哇。我没想到会这样!好吧,我想我还是坚持我的非土耳其思维方式吧!;-) - Tipx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接