2013-09-06 6 views
5

Java hat eine Character.isDefined Methode, aber es gibt keine Entsprechung für die Klasse char in .NET.Was ist die nächste Entsprechung zu Javas Character.isDefined in .NET?

Ich bin mir bewusst, dass Microsoft's old Java libraries have this, aber ich will nicht von dieser Bibliothek abhängen, wenn ich es vermeiden kann.

Gibt es irgendwo in .NET eine Entsprechung? Oder ruft das Aufrufen aller verfügbaren .is * -Methoden kombinatorisch dasselbe Ergebnis hervor? (ZB char.IsLetter (x) || char.IsSymbol (x) etc ....)

Antwort

6

Sie könnten versuchen, mit

int utf32 = 0x1FFFF; 
string surrogate = Char.ConvertFromUtf32(utf32); 
var isDefined = char.GetUnicodeCategory(surrogate, 0) != UnicodeCategory.OtherNotAssigned; 

Sie char.GetUnicodeCategory(char) direkt verwenden können, wenn Sie ein Zeichen von der Basis haben BMP.

Beachten Sie, dass jede Version von .NET verschiedene Versionen von Unicode unterstützt. Daher hängt es von der Version von Unicode ab, die von der aktuellen Version von .NET/aktuellem Betriebssystem verwendet wird.

+0

Ausgezeichnet, das sieht aus wie es das Verhalten sehr genau reproduziert, danke! – pattermeister

+0

char.TryParse (firstChar.ToString(), out firstChar) würde dies zu einem guten Ergebnis führen? –

+0

@RohitGarg 'char.TryParse' prüft die Unicode" Gültigkeit "eines' char' nicht. Es konvertiert einfach eine "Zeichenfolge" in ein "Zeichen". Es ist ziemlich nutzlos. 'char.TryParse (" A ", out ch)' gibt ''A'' zurück, aber klarerweise würde es direkter" A "[0] ==' A'' – xanatos

Verwandte Themen