Sześciocyfrowy unicode uniknął porównania wartości
Mam na przykład sześciocyfrowy znak UnicodeU+100000
które chciałbym porównać z innymchar
w moim kodzie C #.
Moje czytanieDokumentacja MSDN jest to, że ta postać nie może być reprezentowana przezchar
i zamiast tego musi być reprezentowany przezstring
.
znak Unicode w zakresie U + 10000 do U + 10FFFF jest niedozwolony w literale znakowym i jest reprezentowany za pomocą pary surogatów Unicode w literale łańcuchowym
Czuję, że brakuje mi czegoś oczywistego, ale jak można uzyskać poprawne porównanie, aby działało poprawnie:
public bool IsCharLessThan(char myChar, string upperBound)
{
return myChar < upperBound; // will not compile as a char is not comparable to a string
}
Assert.IsTrue(AnExample('\u0066', "\u100000"));
Assert.IsFalse(AnExample("\u100000", "\u100000")); // again won't compile as this is a string and not a char
edytować
k, myślę, że potrzebuję dwóch metod, jednej do akceptowania znaków, a drugiej do akceptowania „wielkich znaków”, tj. łańcuchów. Więc:
public bool IsCharLessThan(char myChar, string upperBound)
{
return true; // every char is less than a BigChar
}
public bool IsCharLessThan(string myBigChar, string upperBound)
{
return string.Compare(myBigChar, upperBound) < 0;
}
Assert.IsTrue(AnExample('\u0066', "\u100000));
Assert.IsFalse(AnExample("\u100022", "\u100000"));