2010-06-17 11 views
7

Quiero hacer un reparto explícito utilizando la información del tipo de una matriz a otra que está relacionada por herencia. Mi problema es que, al utilizar el tipo de información, el compilador arroja un error, pero mi requisito es emitir dinámicamente en función de la información del tipo proporcionado.Reparto dinámico basado en la información del tipo

favor ayuda

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 
{ 
} 

Respuesta

12

La única manera que puede emitir de forma dinámica es con la reflexión. Por supuesto, no puede convertir objChild en TypParent[]; está intentando crear una matriz de Child en una matriz de Type.

se puede utilizar el método de .Cast<T>() llamada con la reflexión para lograr esto:

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

Si necesita uno para los tipos no IEnumerable, realizar un método de extensión/estática:

public static T Cast<T>(this object o) 
{ 
    return (T)o; 
} 
Cuestiones relacionadas