2010-06-17 56 views
7

我想使用类型信息从一个数组到另一个通过继承相关的显式类型转换。我的问题是,使用Type信息时,编译器会抛出错误,但我的要求是根据所提供的Type信息进行动态投射。基于类型信息的动态铸造

请帮助

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

回答

12

可以动态的惟一方式是与反思。当然,你不能投objChildTypParent[] - 你正试图将Child的数组投到Type的数组中。

你可以使用.Cast<T>()方法调用反射来实现这一点:

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

如果你需要一个非IEnumerable的类型,提出延期/静态方法:

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