Wozu Convert.To..., var.Parse und (typ)var

Hi,
ich hab mich mal gefragt ob es einen Grund für diese Unmengen an Konvertierugnmethoden in C# gibt.
Mir bekannt sind folgende:

//Über die Klasse Convert
int a = Convert.ToInt32(Console.ReadLine);
//Über die alte C-Variante
double b = (double)Console.ReadLine;
//über die Parse()-Methode
float c = float.Parse(Console.ReadLine);
//Über den as-Operator
long d = Console.ReadLine as long;
//Über die Methode .ToString()
string e = Console.ReadLine.ToString();

Wenn es noch mehr gibt wäre schön wenn ihr die posten würdet und natürlich auch den Sinn den das alles hat.
Lg der einzigware

  1. Die Klasse Convert gab es seit .NET 1.0. xxx.Parse und xxx.TryParse wurden glaube ich mit 2.0 eingeführt, Convert aus Kompatibilitätsgründen behalten. xxx.(Try)Parse ist Standard.
    ToSTring() hat eine Sonderstellung, da es von Object an alle Objekte vererbt wird. Eine Stringdarstellung eines Objets ist immer gut zu geruachen.
    Type t = (Type) v
    und
    Type t = v as Type
    sind KEINE Konvertierungen, sondern Casts. Deshalb werden deine beiden Beispiele nicht funktionieren.
    Der (Type)-Cast löst eine InvalidCastException aus, wenn er fehlschlägt während der as-Cast einfach null zurückgibt.

Grüße, JasonDelife.

Hi

//Über die Klasse Convert
int a = Convert.ToInt32(Console.ReadLine);

Wie mein Vorredner schon gesagt hat: ist blos ein Überbleibsel alter Versionen. Hab ich auch noch nie verwendet.

//Über die alte C-Variante
double b = (double)Console.ReadLine;

Funktionier NICHT, da es nur Konvertieren kann, wofür schon Konvertierungsoperatoren in den Klassen double oder string existieren. zB Anwendbar bei int zu double oder andersrum oder bei Basisklasse zu abgeleiteter Klasse.
Sollte diese Konvertierung fehlschlagen (wie in deinem Fall) gibts einen Fehler.

//über die Parse()-Methode
float c = float.Parse(Console.ReadLine);

Das was man in diesem Fall tatsächlich verwenden sollte. Oder zur Sicherheit eben TryParse verwenden.

//Über den as-Operator
long d = Console.ReadLine as long;

Funktionier hier ebenfalls nicht (wie du es wahrscheinlich willst), da es nur bei Verweistypen klappt. Eingesetzt wird es meistens bei Casts von Basisklasse in abgeleitete Klasse, wenn das schief geht gibt es null zurück.

//Über die Methode .ToString()
string e = Console.ReadLine.ToString();

Damit ist nur die Konvertierung in string möglich und in den meisten Fällen gibt es da keine Alternative. Also (string)5 klappt zB nicht. Deshalb für Konvertierungen in string immer ToString() benutzen.
Das unterstützt auch sicher JEDER Typ, da es von objekt geerbt wird.

MfG IGnow