Kolumne: C# im Fokus

Möglichkeiten der Datentypkonvertierung in C
Kommentare

Neben der Verwendung von Bedingungen (if-Statements) und Schleifen gehören Anweisungen zur Typkonvertierung zu den am häufigsten verwendeten Sprachmitteln. Die folgende Ausgabe der C#-Kolumne gibt einen Überblick über die verschiedenen Möglichkeiten.

Die Notwendigkeit der Typkonvertierung ergibt sich innerhalb eines Anwendungssystems an vielen Stellen, sei es beim Aufruf einer Methode, die als Parameter einen bestimmten Typ erwartet, oder beim Einlesen von Daten aus einer Textdatei. Im letzten Beispiel muss in der Regel eine Vielzahl an Konvertierungen durchgeführt werden, da zunächst nur reine Zeichenketten vorliegen. Als konkretes Beispiel hierfür kann der Import von Produktdaten genannt werden. Innerhalb einer solchen Textdatei findet man Angaben zum Preis, zur Menge, zur Verfügbarkeit usw. Nachdem diese einzelnen Felder eingelesen wurden, müssen sie in die jeweiligen Zieldatentypen überführt werden. Eine solche Konvertierung kann, wenn sie nicht implizit geschieht, auf vielen Wegen realisiert werden.

Die Klasse „Convert“

Die Klasse Convert, die seit der ersten .NET-Version verfügbar ist, ermöglicht die einfache Konvertierung von Datentypen. Sie besitzt dazu eine Menge an statischen Methoden der Form ToDatentyp wie z. B. ToString, ToUInt32 etc. In Listing 1 wird die Funktionsweise anhand einiger Beispiele demonstriert. Weiterhin können einigen Methoden Formatanweisungen übergeben werden. Das ist besonders bei der Umwandlung von Datumswerten praktisch, wie es in Listing 2 zu sehen ist. Die Liste werte enthält einige Datumsangaben als Zeichenkette plus eine Locale-Definition. Die Locale gibt an, welche Ländereinstellung (CultureInfo) für die Formatierung verwendet werden soll. Innerhalb der foreach-Schleife werden die Einträge der Liste verarbeitet. Die enthaltene Datumszeichenkette wird mittels Convert und vorgegebener Ländereinstellung in einen gültigen DateTime-Wert umgewandelt. Neben der reinen Konvertierung von Datentypen ermöglichen die verschiedenen XXXBase64XXX-Methoden die Verarbeitung von Base-64-kodierten Werten. Als Beispiel hierzu dient in Listing 3 die Methode ToBase64String. Mithilfe dieser Methode wird ein übergebenes Array, das 8-Bit-UInt-Werte enthält, in eine entsprechende mit Base-64-Ziffern kodierte Darstellung überführt.

Listing 1

public static void Convert()
{
  int intValue = 42;      
  string strFloatValue = "22.9";
  string strDateValue = "06.09.2011";
  DateTime dateValue = Convert.ToDateTime(strDateValue);
  float fltValue = Convert.ToSingle(strFloatValue);
  sbyte shortValue = Convert.ToSByte(intValue);
}  

Listing 2 – Convert mit Formater

class Datumswerte
{
  public string Datum = string.Empty;
  public string locale = string.Empty;
}
public static void ConvertFormat()
{      
  List werte = new List() { 
    new Datumswerte() { Datum = "23.03.2010", locale = "de-DE" }, 
    new Datumswerte() { Datum = "18-11-2010", locale = "de-DE" }, 
    new Datumswerte() { Datum = "15/03/2011", locale = "de-DE" }, 
    new Datumswerte() { Datum = "2010.03.14", locale = "de-DE" },
    new Datumswerte() { Datum = "11.13.2010", locale = "en-US" }, 
    new Datumswerte() { Datum = "08-11-2010", locale = "en-US" }, 
    new Datumswerte() { Datum = "11/03/2011", locale = "en-US" }, 
    new Datumswerte() { Datum = "2010.03.14", locale = "en-US" }
  };
  CultureInfo ci = null;
  foreach (Datumswerte datum in werte)
  {
    ci = new CultureInfo(datum.locale);
    DateTime dateType = Convert.ToDateTime(datum.Datum, 
           (IFormatProvider)ci.GetFormat(typeof(DateTimeFormatInfo)));
    Console.WriteLine("Datum: {0}", dateType.ToShortDateString());
  }
}  

Listing 3 – Base64 Example

public static void Convert64Image()
{
  Image image = Image.FromFile(@"imagefile.gif");
  using (MemoryStream ms = new MemoryStream())
  {
    image.Save(ms, ImageFormat.Gif);
    byte[] imageBytes = ms.ToArray();
    string image64Str = Convert.ToBase64String(imageBytes);
    Console.WriteLine(image64Str);
  }
}  
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -