gpt4 book ai didi

c# - 基于类型信息的动态转换

转载 作者:太空狗 更新时间:2023-10-29 20:03:52 25 4
gpt4 key购买 nike

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

请帮忙

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

最佳答案

动态转换的唯一方法是反射。当然你不能投 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;
}

关于c# - 基于类型信息的动态转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3062807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com