Zastanawiam się, jaki jest właściwy sposób porównania dwóch postaci ignorujących przypadek, który zadziała dla wszystkich kultur. Czy najlepszym sposobem na przetestowanie dwóch znaków bez ignorowania przypadku jest również Comparer<char>.Default
? Czy to działa dla par zastępczych?Jaki jest prawidłowy sposób porównania char ignorowanie przypadku?
EDIT: Dodano próbka IComparer<char>
realizacja
Jeśli to pomaga każdemu to, co ja postanowiłem wykorzystać
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 może konwertować do odpowiedniego górnego przypadku w odniesieniu do obecnego hodowli, ale kolejność słownikowa zwrócone nie jest prawidłowe. Być może jest to obsługiwane tylko w .NET dla porównań łańcuchów. – Holstebroe