C# 基于类型信息的动态铸造

C# 基于类型信息的动态铸造,c#,casting,C#,Casting,我想使用类型信息从一个数组到另一个数组进行显式转换,该类型通过继承关系关联。我的问题是,在使用类型信息强制转换时,编译器会抛出错误,但我的要求是根据提供的类型信息动态强制转换 请帮忙 class Program { static void Main(string[] args) { Parent[] objParent; Child[] objChild = new Child[] { new Child(), new Child() };

我想使用类型信息从一个数组到另一个数组进行显式转换,该类型通过继承关系关联。我的问题是,在使用类型信息强制转换时,编译器会抛出错误,但我的要求是根据提供的类型信息动态强制转换

请帮忙

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

可以动态强制转换的唯一方法是使用反射。当然,您不能将
objChild
强制转换为
typeparent[]
——您正在尝试将
子对象的数组强制转换为
类型的数组

您可以使用反射调用的
.Cast()
方法来实现这一点:

 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;
}
publicstatict-Cast(这个对象o)
{
返回(T)o;
}