Bre*_*yan 47 .net c# string comparison char
我想知道比较两个字符的正确方法是什么,而忽略了适用于所有文化的案例.另外,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()));
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 81
这取决于"为所有文化工作"的含义.即使在土耳其,你想让"我"和"我"平等吗?
你可以使用:
bool equal = char.ToUpperInvariant(x) == char.ToUpperInvariant(y);
Run Code Online (Sandbox Code Playgroud)
......但是我不确定你对"作品"的理解是否符合所有文化的"有效".
当然,您可以将两个字符转换为字符串,然后在字符串上执行您想要的任何比较.效率稍差,但它确实为您提供了框架中可用的所有比较范围:
bool equal = x.ToString().Equals(y.ToString(),
StringComparison.InvariantCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)
对于代理对,a Comparer<char>
无论如何都不可行,因为你没有单一的char
.你可以创建一个Comparer<int>
.
Hen*_*man 13
使用默认(不是不变量)文化:
if (char.ToLower(ch1) == char.ToLower(ch2))
{ .... }
Run Code Online (Sandbox Code Playgroud)
或者指定一种文化:
CultureInfo myCulture = ...;
if (char.ToLower(ch1, myCulture) == char.ToLower(ch2, myCulture))
{ .... }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
46609 次 |
最近记录: |