Laden...

Type (dynamisch) zum Casten benutzen

Erstellt von Jochen1980 vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.106 Views
J
Jochen1980 Themenstarter:in
111 Beiträge seit 2006
vor 15 Jahren
Type (dynamisch) zum Casten benutzen

Hallo,
habe folgendes Problem:
Ich lese aus einer XML Datei Werte, diese sind ja erstmal alle String.

Mit Reflection schreibe ich dann zur Laufzeit die Properties eines Objekts. So lange diese Properties alle vom Typ string sind ist alles super. Wenn aber eine Property vom Typ Int64 ist, klappt das mit dem property.setproperty nicht, da ich ja den falschen Datentyp (string) hab, die Property aber Int64 ist.

Man kann ja rausfinden, welcher Datentyp erwartet wird, also weiß ich, dass ich einen Int64 brauche. Hab ich auch schon als Type.

Frage:

Wie kann ich mit diesem "Type" Objekt casten? Muss doch irgendwie funktionieren, oder?

S
248 Beiträge seit 2008
vor 15 Jahren

Hallo,

du könntest dies versuchen:

string value = "4123";
long l = (long)Convert.ChangeType(value, typeof(long));

Spo

J
Jochen1980 Themenstarter:in
111 Beiträge seit 2006
vor 15 Jahren

Super, hat geklappt, danke!

3.971 Beiträge seit 2006
vor 15 Jahren

Als nachträglicher Hinweis, die zu konvertierenden Klassen oder Werttypen müssen IConvertable implementieren (Convert.ChangeType-Methode (Object, Type)).

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

D
8 Beiträge seit 2008
vor 15 Jahren

Hallo Zusammen,

kurze Frage von mir noch dazu:
Was ist der Unterschied / Vorteil zu Convert.ToInt64()?
Jetzt außer, dass eben beliebige Typen, die IConvertable implementieren, konvertiert werden können...

2.082 Beiträge seit 2005
vor 15 Jahren

In diesem Fall ist nicht immer klar, in welchen Typen konvertiert werden muss (dynamisches Casting).

Ansonsten kannst du schon Convert.ToInt64() verwenden, wobei ich Int64.TryParse eher nutze.

Ich denke mal, dass Convert.ToInt64 sogar schneller ist.

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo frisch,

nö, zumindest nicht im Vergleich von Convert.ToInt64 und Parse, denn Convert.ToInt64 benutzt Parse 🙂

public static long ToInt64(string value)
{
    if (value == null)
    {
        return 0L;
    }
    return long.Parse(value, CultureInfo.CurrentCulture);
}

herbivore

2.082 Beiträge seit 2005
vor 15 Jahren

Hi herbivore,

ich meine im Vergleich von Convert.ToInt64 und Convert.ChangeType 😉

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de