Frage

sollte mein Szenario einfach sein ... der Typ-I FROM ist immer 'string' konvertiert werden soll. Was ich will, konvertieren ... viele Dinge sein könnte -. Ints, Datetime, ... Strings, etc

Dies wäre einfach:

string valueToConvertFrom = "123";

int blah = Convert.ToInt32(valueToConvertFrom);

Allerdings ... Ich weiß nicht (erst zur Laufzeit), dass der Wert I konvertieren muß, ist ein ‚Int‘ (oder was auch immer). Ich habe dies versucht:

string valueToConvertFrom = "123";

Type convertToType = typeof(int);

object blah = Convert.ChangeType(valueToConvertFrom, convertToType);

Aber das gibt mir die folgende Fehlermeldung: „Objekt muss IConvertible implementieren“

Ich will nicht eine switch-Anweisung und rufen „Convert.ToBlah“, basierend auf dem Typnamen ... irgendwelche Vorschläge?

zu tun haben
War es hilfreich?

Lösung

die saubere Art und Weise zu tun, es den einen Typeconverter verwendet. Sie können durch den Aufruf der TypeDescriptor eine Instanz eines Typs Konverter erhalten .GetConverter und dann die Instanz des Typs Konverter mit dem convertion zu tun. so etwas wie folgt aus:

string valueToConvertFrom = "123";

Type convertToType = typeof(int);

TypeConverter tc =  TypeDescriptor.GetConverter(convertToType);             

object blah =tc.ConvertFromString(valueToConvertFrom);

Andere Tipps

String-Klasse implementiert IConvertible, dieser Code einfach funktionieren soll. Welche Version von .NET wollen Sie?

object o = Convert.ChangeType( str, convertToType );

Außerdem sind die meisten der Arten Sie Parse-Methode implementieren erwähnt, so dass Ihre besten Schuss in etwa so sein könnte.

Type convertToType = ...;
MethodInfo mi = convertToType.GetMethod("Parse", BindingFlags.Static);
object blah;
if(mi != null)
{
    blah = mi.Invoke(null, new object[]{valueToConvertFrom});
}
else
{
    // the type doesn't implement the Parse method, handle it another way :/
}

Timothy Frage, wie allgemein auf die Frage nach der Art der Umwandlung in .NET angewandt wird, ist ein sehr großes Problem. Während Umwandlung Strategien etwas unkompliziert sind in bestimmten Szenarien mit bekannten Typen, leider gibt es keine verallgemeinerte Strategie in jeder Implementierung von .NET Typumwandlung zur Laufzeit von einem beliebigen Typ in einem anderen zu erreichen, noch ist ein solche Strategie bevorstehende aus Redmond. Allerdings Microsoft einige gute Richtlinien für das allgemeine Konzept der Typumwandlung liefert, einschließlich:

Ich habe mit dem gleichen allgemeinen Problem in meinen Systemen zu tun hatte, und als eine Lösung habe ich alle Standardstrategien in eine Methode konsolidiert. Der Umfang dieser Ausgabe ist breit und die damit verbundenen Umstellungsstrategien sind vielfältig, so dass in diesem konsolidierten Ansatz kann nur in einem kompletten technischen Artikel abgedeckt wird. Allerdings biete ich hier eine Kopie meiner Methode Dokumentation in der Hoffnung, dies wird Ihnen einen guten Überblick über die allgemeinen Anforderungen erhalten helfen müssen Sie Adresse, wenn Sie eine ähnliche, generali Lösung entwickeln wollen. Hier ist der Link zu meiner Dokumentation:

Ich hoffe, das hilft Ihnen aus,

Mark

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top