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