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