【发布时间】:2010-11-26 13:31:21
【问题描述】:
我想知道比较两个忽略大小写的字符的正确方法适用于所有文化。另外,Comparer<char>.Default 是在不忽略大小写的情况下测试两个字符的最佳方法吗?这对代理对有效吗?
编辑:添加示例IComparer<char> 实现
如果这对任何人有帮助,这就是我决定使用的方法
public class CaseInsensitiveCharComparer : IComparer<char> {
private readonly System.Globalization.CultureInfo ci;
public CaseInsensitiveCharComparer(System.Globalization.CultureInfo ci) {
this.ci = ci;
}
public CaseInsensitiveCharComparer()
: this(System.Globalization.CultureInfo.CurrentCulture) { }
public int Compare(char x, char y) {
return Char.ToUpper(x, ci) - Char.ToUpper(y, ci);
}
}
// Prints 3
Console.WriteLine("This is a test".CountChars('t', new CaseInsensitiveCharComparer()));
【问题讨论】:
-
ToUpper 可能会将 char 转换为相对于当前区域性的正确大写,但返回的词法顺序不正确。可能这仅在 .NET 中支持用于字符串比较。
标签: c# .net string comparison char