Möglichkeiten der Datentypkonvertierung in C (Teil 3)
Kommentare

Umwandlung per Cast
Wie auch schon unter C, ermöglich C# die Umwandlung von Typen mittels Cast-Operation. Dabei wird lediglich der gewünschte Zieldatentyp in Klammern der Quellvariablen vorangestellt.

Umwandlung per Cast

Wie auch schon unter C, ermöglich C# die Umwandlung von Typen mittels Cast-Operation. Dabei wird lediglich der gewünschte Zieldatentyp in Klammern der Quellvariablen vorangestellt. Im Gegensatz zum im vorherigen Abschnitt beschriebenen as-Operator wird bei ungültigen Umwandlungen eine Ausnahme (Exception) vom Typ InvalidCastException geworfen. Dafür können mittels Cast-Technik aber auch Wertetypen, Auflistungen (enum) und Strukturen (struct) umgewandelt werden. In Listing 6 werden die Syntax und die Verwendung anhand verschiedener Beispiele demonstriert. Cast-Operationen können weiterhin in implizite und explizite Konvertierungen unterschieden werden. Bei impliziten Umwandlungen findet eine Datentypkonvertierung ohne explizite Angabe des gewünschten Zieldatentyps statt. Hierbei reicht es aus, die Quellvariable einer Variablen vom gewünschten Datentypen zuzuweisen:

short shortValue = 44; long longValue = shortValue; 

Listing 6

public static void UsingCast()
{
  int intValue = 100;
  byte byteValue = (byte)intValue; // Explizit Cast
  double dblValue = 23.6;
  decimal decValue = (decimal)dblValue; // Explizit Cast
  short shortValue = 44;
  long longValue = shortValue;  // Implizit Cast
}  

Das ist allerdings nur möglich, wenn es bei der Zuweisung zu keinen Informationsverlusten kommt. Kann es bei der Umwandlung zu Datenverlusten kommen, ist zwingend ein expliziter Cast notwendig:

int intValue = 100; byte byteValue = (byte)intValue; 

Der Cast-Vorgang unterstützt im Gegensatz zu dem as-Operator eigene Typkonvertierungen. Dazu muss die jeweilige Klasse bestimmte statische Methoden implementieren, die als explicit bzw. implicit deklariert sind. Diese Methoden werden dann in einem Cast-Vorgang aufgerufen. Listing 7 verdeutlicht die Umsetzung eigener Typkonverter. Die erste als implicit deklarierte Methode wird aufgerufen, wenn einer int-Variablen der Wert einer konkreten Instanz der Klasse Ganzzahl zugewiesen wird. Dagegen wird die zweite als implicit deklarierte Methode aufgerufen, wenn einer Variablen vom Typ Ganzzahl ein int-Wert zugewiesen werden soll. Besteht bei einem eigenen Konverter ebenfalls die Gefahr, dass es zu Datenverlusten während der Umwandlung kommt, muss statt implicit das Schlüsselwort explicit verwendet werden.

Listing 7

class Ganzzahl
{
  public int value;

  public Ganzzahl(int d) 
  { 
    this.value = d; 
  }
  public static implicit operator int(Ganzzahl d)
  {
    return d.value;
  }
  public static implicit operator Ganzzahl(int zahl)
  {
    return new Ganzzahl(zahl);
  }
}  

Zusammenfassung

Für die Konvertierung von Typen stehen unterschiedlichste Mittel bereit. Tabelle 1 listet die verschiedenen Methoden noch einmal auf und zeigt, ab welcher .NET-Version sie verfügbar bzw. anwendbar sind. Je nach Ausgangslage und Anforderung sind einige Mechanismen besser geeignet als andere. Soll z. B. eine Zeichenkette, die nur aus Ziffern besteht, in einen int-Wert überführt werden, kann dafür keine Cast-Operation verwendet werden. Dafür können aber die Methoden TryParse, Parse und Convert eingesetzt werden. In der nächsten Ausgabe des dot.NET Magazins gehen wir der Frage nach, wann welcher Konvertierungsmechanismus am besten geeignet ist. Zusätzlich werden einige Anwendungsmuster vorgestellt.

Methode/Datentyp

bool

byte

sbyte

char

short

ushort

int

uint

 

Parse

1.0

1.0

1.0

1.0

1.0

1.0

1.0

1.0

 

TryParse

2.0

2.0

2.0

2.0

2.0

2.0

2.0

2.0

 

as

 

Cast Operation

Ja

Ja

Ja

Ja

Ja

Ja

Ja

Ja

 

Convert

1.0

1.0

1.0

1.0

1.0

1.0

1.0

1.0

 

Methode/Datentyp

ulong

long

float

double

decimal

enum

Referenz

struct

DateTime

Parse

1.0

1.0

1.0

1.0

1.0

1.0

1.0

TryParse

2.0

2.0

2.0

2.0

2.0

4.0

2.0

as

Ja

Cast Operation

Ja

Ja

Ja

Ja

Ja

Ja

Ja

todo

Ja

Convert

1.0

1.0

1.0

1.0

1.0

1.0

Marc André Zhou arbeitet als Senior Consultant bei der Logica Deutschland GmbH & Co. KG. Seine Schwerpunkte liegen im Bereich SharePoint, Softwarearchitekturen und Frameworks, hier hauptsächlich im .NET-Umfeld
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -