我想使用从一个数组到另一个数组的类型信息进行显式强制转换,这是通过继承关联的。我的问题是,在使用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
{
}
答案 0 :(得分:13)
动态投射的唯一方法是使用反射。当然,您无法将objChild
投射到TypParent[]
- 您正在尝试将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;
}