Typkonvertierung an Hand des Typnamens oder des Type-Objektes

11/11/2009 - 04:20 von Gerrit Kuhlendahl | Report spam
Moinsen!

Ich dreh mich hier grad im Kreis. Was ich brauche ist eine Funktion,
die mir zur Laufzeit eine Typkonvertierung durchführt, also wie DirectCast
bzw. Ctype.

Haken an der Sache ist jedoch, das der Typ, in den konvertiert werden
soll, durch eine Zeichenfolge oder ein Type-Objekt angebenen werden
soll, also sowas in der Art:


Dim TypeName As String = "EinTyp"

Result = CType(Formater.Deserialize(MemStream),TypeName)

bzw.

Result = CType(Formater.Dezerialize(MemStream),Result.GetType)


Ein Arbeiten über Select/Case-Anweisungen fàllt flach, da es zum zu
viele Datentypen geht und auch Erweiterungen einfach machbar sein
sollen.

Auf die Idee, jedem Typen eine gleichnamige als Shared deklarierte
Methode mitzugeben, die über Reflektion aufgerufen werden könnte
bin ich auch schon gekommen, wollte ich aber, falls möglich vermeiden.

Hat jemand da mal eine zündende Idee???

Viele Grüße

Gerrit



KUH-SOFT - Die Software von glücklichen Programmierern
 

Lesen sie die antworten

#1 Elmar Boye
11/11/2009 - 10:16 | Warnen spam
Hallo Gerrit,

"Gerrit Kuhlendahl" schrieb ...
Ich dreh mich hier grad im Kreis. Was ich brauche ist eine Funktion,
die mir zur Laufzeit eine Typkonvertierung durchführt, also wie DirectCast
bzw. Ctype.

Haken an der Sache ist jedoch, das der Typ, in den konvertiert werden
soll, durch eine Zeichenfolge oder ein Type-Objekt angebenen werden
soll, also sowas in der Art:


Dim TypeName As String = "EinTyp"



Das ist wàre noch einfach:
Type type = Type.GetType(TypeName)
http://msdn.microsoft.com/de-de/lib...99sx1.aspx


Result = CType(Formater.Deserialize(MemStream),TypeName)



Der Haken wàre hier am Ende "Result", das wàre hier immer System.Object.
Und so wàre ein Cast gleich welcher Form überflüssig, denn das Objekt
wird dadurch erstmal kein anderes.
Denn auch ein CType kann etwas nur konvertieren,
von dem es den System.Type ermitteln kann.
http://msdn.microsoft.com/de-de/lib...877xb.aspx

Auf die Idee, jedem Typen eine gleichnamige als Shared deklarierte
Methode mitzugeben, die über Reflektion aufgerufen werden könnte



Das wàren Überladungen Operator CType
http://msdn.microsoft.com/de-de/lib...t295a.aspx

Nur das CType zur Kompilierzeit danach sucht,
und den dazu den Type kennen muß.
Und dort am Ende ggf. ein neues Objekt erzeugt wird.

Hat jemand da mal eine zündende Idee???



Wozu soll das Ganze überhaupt dienen?

Gruß Elmar

Ähnliche fragen