从泛型类型获取属性值时出现“对象与目标类型不匹配”错误

本文关键字:目标 对象 类型 不匹配 错误 获取 泛型类型 属性 | 更新日期: 2023-09-27 18:17:15

我试图在以下方法中从泛型类型获得属性的值,但我收到上述错误:

  private static void GetValue<T>(T table)
    {
        Type type = typeof(T);
        PropertyInfo[] props = type.GetProperties().Where(p => p.PropertyType.Name.ToLower() != "column").ToArray();
        PropertyInfo[] colProps = type.GetProperties().Where(p => p.PropertyType.Name.ToLower() == "column").ToArray();
        foreach (PropertyInfo p in props)
            foreach (PropertyInfo cp in colProps)
            {
                if (cp.Name.StartsWith(p.Name))
                {
                    var s = p.GetValue(type, null);                        
                }
            }        
    }

GetValue想要属性所在的类型,对吗?

有人对此有什么见解吗?

谢谢!

从泛型类型获取属性值时出现“对象与目标类型不匹配”错误

不,GetValue需要一个实例,如果成员是静态的,则为null。

var s = p.GetValue(table, null); 

p.GetValue(type, null)想要的实例类型的值是被检索-在这种情况下,你可能想要的列,但你没有它的一个实例方便(因为你所做的是检索PropertyInfo的)。

你仍然可以像你一样选择PropertyInfo(作为一次性操作),因为它们适用于类型,但是你还需要迭代列,并在符合你的标准的每个列上使用适当的PropertyInfo(即列名是'xyz')。

我会建议一些代码,但你目前的例子是相当混乱,所以很难告诉你到底是什么你想做的