Dynamisches Casten


Meldur

Erfahrenes Mitglied
Hallo! Ich habe ein object, in welchem sich ein Int-Array unbekannter Dimension versteckt. Nun bekomme ich diese zwar über ein GetType heraus, nur kann ich diese Variable nicht casten, da dies dann wohl in einer If-Anweisung (Unterscheidung der ermittelten Casting-Typen) geschehen müßte. Casten in einer If-Anweisung setzt jedoch eine vorher deklarierte Variable voraus, deren Typ ich aber nunmal noch nicht kenne. Weis jemand Rat?
Danke, Peter
 

Christian Kusmanow

Erfahrenes Mitglied
Hallo Meldur!

Denk mal bitte logisch.
Ein Array vom Typ int gibt dir entweder ein int oder null (Feld nicht initialisiert) zurück.
Wieso willst Du dann noch auf Type prüfen? Das solltest Du wenn dein Array vom Typ object ist.

Wenn Du Herrausfinden willst ob ein bestimmter Typ aus einem ObjektArray herrausgecasted werden kann,
kannst du den Operator as verwenden. Du bekommst null wenn nicht gecasted werden konnte
und ansonsten das object. Bei Zahlen funktioniert dieses aber nicht weil sie ein WertTyp sind.
Code:
object[] oArray = new object[3];
oArray[ 0 ] = (string) "ein String";
oArray[ 1 ] = (Int32) 99;
// Das letzte bleibt null

foreach ( object obj in oArray ){
	if ( obj as string != null )
		MessageBox.Show( string.Format( "String gefunden! Wert=\"{0}\"", (string) obj ) );
	else if ( obj != null && obj.GetType().Equals( typeof(System.Int32) ) )
		MessageBox.Show( string.Format( "Zahl gefunden! Wert=\"{0}\"", (int) obj ) );
	else if ( obj == null)
		MessageBox.Show( "Wert ist null" );
}
Casten in einer If-Anweisung setzt jedoch eine vorher deklarierte Variable voraus
Falsch, Objekte in einer If-Anweisung müssen initialisiert sein.
Das sie Deklariert sein müssen ist klar, sonst wären sie gar nicht da. ;)
Die VS IDE prüft vor dem Kompilieren ob die Objekte in den If-Anweisungen nicht initialisiert sind und meldet dies gegebenenfalls.
Kompilieren kann man sowieso, aber dein Proggi würde in der If-Anweisung eine Ausnahme werfen.
Du musst also deine Variablen und Arrays immer mit einem Wert initialisieren.
Objekte wenigstens mit null. Und Zahlen mit einem Wert (!)

MfG, cosmo
 

Meldur

Erfahrenes Mitglied
Hi! Mir ist schon klar, daß ein Array eines bestimmten Typs auch nur diesen (oder halt NULL) zurückliefern kann - allerdings geht es in meinem speziellen Fall (ich wollte es ja eigentlich allgemeiner fassen) darum, daß ich ein int-Array unbekannter Dimensionierung in einem Objekt erhalte und aber damit arbeiten muß - nun kann ich das ja wie bereits erwähnt nur in eine Variable casten, die bereits einem Array dieser Form entspricht - ergo hab ich ein Problem und suche dazu ein Lösung.