2010-06-17 17 views
7

Ich möchte eine explizite Umwandlung mit Typ Information von einem Array zu einem anderen, die durch Vererbung verwandt ist, vornehmen. Mein Problem ist, dass der Compiler bei der Verwendung von Type-Informationen einen Fehler auslöst, aber meine Anforderung besteht darin, basierend auf den bereitgestellten Type-Informationen dynamisch zu casten.Dynamic Casting basierend auf Typinformationen

Bitte Hilfe

class Program 
{ 
    static void Main(string[] args) 
    { 
     Parent[] objParent; 
     Child[] objChild = new Child[] { new Child(), new Child() }; 
     Type TypParent = typeof(Parent); 

     //Works when i mention the class name 
     objParent = (Parent[])objChild; 

     //Doesn't work if I mention Type info 
     objParent = (TypParent[])objChild; 
    } 
} 

class Parent 
{ 
} 

class Child : Parent 
{ 
} 

Antwort

12

Die einzige Möglichkeit, dynamisch mit Reflexion werfen kann. Natürlich können Sie objChild nicht in TypParent[] umwandeln - Sie versuchen, ein Array von Child in ein Array von Type zu werfen.

könnten Sie verwenden die .Cast<T>() Methode mit Reflexion aufgerufen, dies zu erreichen:

MethodInfo castMethod = this.GetType().GetMethod("Cast").MakeGenericMethod(typeParent); 
object castedObject = castMethod.Invoke(null, new object[] { objChild }); 

Wenn Sie einen benötigen für Nicht-IEnumerable Typen, stellen eine Erweiterung/statische Methode:

public static T Cast<T>(this object o) 
{ 
    return (T)o; 
} 
Verwandte Themen