Effiziente Datentypkonvertierung mit C (Teil 2)
Kommentare

Parse vs. TryParse
Für die Konvertierung von Wertetypen bieten sich die Methoden Parse und TryParse an. Auch für den Einsatz der Methoden gilt Ähnliches, wie bereits im vorherigen Abschnitt beschrieben

Parse vs. TryParse

Für die Konvertierung von Wertetypen bieten sich die Methoden Parse und TryParse an. Auch für den Einsatz der Methoden gilt Ähnliches, wie bereits im vorherigen Abschnitt beschrieben wurde. Kann die gewünschte Konvertierung nicht durchgeführt werden, wirft die Parse-Methode einen Fehler (Exception) und die TryParse-Methode signalisiert den Erfolg über ihren Rückgabewert vom Typ Boolean. Generell ist die Verwendung der TryParse-Methode vorzuziehen, da diese keine Ausnahmen (Exceptions) erzeugt und somit schneller ist. Muss ein solcher Konvertierungsfehler jedoch an einer „höheren“ Stelle behandelt werden, sollte die Parse-Methode eingesetzt werden. Somit spart man sich die manuelle Erzeugung und Auslösung einer Ausnahme. In Bezug auf die Geschwindigkeit ergeben sich zunächst nur marginale Unterschiede zwischen Parse und TryParse. Microsoft selbst hat ein kleines Vergleichsprogramm für den Zeitvergleich zur Verfügung gestellt. Die Abbildung 1 zeigt die Oberfläche des Testprogramms. Über die Einstellung „Success Rate“ wird die Erfolgsquote der Konvertierungsversuche definiert. Ein Wert von 100 (%) sagt aus, dass alle Parse/TryParse-Vorgänge erfolgreich durchgeführt werden. Wird der Wert auf 50 (%) festgelegt, wird nur jede zweite Konvertierung erfolgreich ausgeführt. Die Tabelle 1 stellt fünf Ausführungen gegenüber. Wie anhand der Werte ablesbar ist, verschlechtert sich die Geschwindigkeit der Parse-Methode gegenüber der TryParse-Methode, je höher die Fehlerquote wird. Da die TryParse-Methode keine Ausnahmen (Exceptions) erzeugt, besitzt sie eine bessere Performance gegenüber der Parse-Methode. Die Werte variieren natürlich von Lauf zu Lauf und bei einer nullprozentigen Fehlerquote ist das Laufzeitverhalten der beiden Methoden nahezu identisch.

Abb. 1: Oberfläche des Testprogramms
Abb. 1: Oberfläche des Testprogramms

Methode/Success Rate 100 % 75 % 50 % 25 % 0 %
Parse 2633 9808465 19682064 29208669 39403035
TryParse 3810 2855 2156 2485 1710
Faktor (Parse vs. TryParse) ≈ 0,31 ≈ 3434 ≈ 9128 ≈ 11753 ≈ 23042

Tabelle 1: Zeitlicher Vergleich der Methoden Parse und TryParse (50 x Integer-Konvertierung)

Ländereinstellungen

Bei der Umwandlung von Wertetypen in gültige Formate tritt oft ein Problem im Zusammenhang mit länderspezifischen Einstellungen auf. Dies betrifft meist Datumswerte oder auch Währungsbeträge. Liegt z. B. ein Währungsbetrag zunächst als Zeichenkette vor, z. B. „14.99“, muss dieser unter Berücksichtigung des Ausgangsformats in eine korrekte Darstellung überführt werden. Die Methoden Parse und TryParse verwenden dazu automatisch die Länderinformationen des aktuellen Threads. Die dort verwendeten Ländereinstellungen leiten sich, wenn sie nicht anderweitig überschrieben wurden, aus den Systemeinstellungen ab, die unter „Region und Sprache“ (Abb. 2) in der Systemsteuerung festgelegt wurden (Listing 3). Wird die Zeichenkette „14.99“ ohne länderspezifische Angaben in einen decimal-Wert überführt, ergibt sich der falsche Wert 1499. Der zweite Aufruf übergibt der Parse-Methode zusätzlich eine Formatangabe für die Konvertierung. Die so umgewandelte Zahl ist daher korrekt und hat den Wert 14,99.

Abb. 2: Ländereinstellungen
Abb. 2: Ländereinstellungen

Listing 3

public static void TestParseLocale()
{
  string betrag = "14.99"; // PUNKT als Dezimaltrennzeichen           
  decimal betragValue = Decimal.Parse(betrag);
  Console.WriteLine("Ohne FormatInfo: {0}", betragValue);      
  CultureInfo ci = new CultureInfo("en-US");
  betragValue = Decimal.Parse(betrag, ci.NumberFormat);      
  Console.WriteLine("Mit FormatInfo: {0}", betragValue);
}  
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -