我有三个类,设置如下。我想从基类中为基类型列表中的所有子类获取属性 values 的数组。
public abstract class Base
{
...
}
public class A : Base
{
...
}
public class B : Base
{
...
}
所以我的代码看起来像list1<Base>
是一个包含A
和B
类型元素的列表:
List<PropertyInfo> props = new List<PropertyInfo>();
foreach(property in typeOf(Base).GetProperties())
{
props.add(property)
}
foreach (var ele in list1)
{
var propsArray = props.Select(prop => prop.GetValue(ele, null)).ToArray();
...
}
它遇到的第一个项目没有问题,无论是A
还是B
,但如果它是相反的类型则第二个问题。
这是堆栈跟踪。
System.Reflection.TargetException: Object does not match target type.
at System.Reflection.RuntimeMethodInfo.CheckConsistency(Object target)
at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index)
非常感谢任何帮助!