我正在尝试使用反射设置一个数组字段,如下所示:
FieldInfo field = ...
A[] someArray = GetElementsInSomeWay();
field.SetValue(this, someArray);
该字段具有类型B[]
。B
继承自,并且在编译时不知道
A
确切的类型。返回,但里面的真正元素都是's. 是一种库方法,不能更改。B
GetElementsInSomeWay()
A[]
B
GetElementsInSomeWay()
我最多能做的就是得到B
with System.Type type = field.FieldType.GetElementType()
。但是我不能将数组转换为所需的类型,例如
someArray as type[]
因为[]
在声明数组类型之前需要一个确切的类型。或者我在这里错过了什么?System.Type
如果在运行时使用变量知道该类型,我可以声明某种类型的数组吗?
以直接方式执行此操作会产生以下错误(这里A
isUnityEngine.Component
和B
isAbilityResult
也可以是其他几十个类之一,都继承自(可能通过长继承链)UnityEngine.Component
):
ArgumentException: Object type UnityEngine.Component[] cannot be converted to target type: AbilityResult[]
Parameter name: val
System.Reflection.MonoField.SetValue (System.Object obj, System.Object val, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Globalization.CultureInfo culture) (at /Applications/buildAgent/work/3df08680c6f85295/mcs/class/corlib/System.Reflection/MonoField.cs:133)
System.Reflection.FieldInfo.SetValue (System.Object obj, System.Object value) (at /Applications/buildAgent/work/3df08680c6f85295/mcs/class/corlib/System.Reflection/FieldInfo.cs:150)