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

时间:2014-08-07 23:11:07

标签: c# reflection properties

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

  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想要属性生活的类型吗?

有没有人对此有任何见解?

谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

您仍然可以选择PropertyInfo(作为一次性操作),因为它们适用于类型,但您还需要迭代列并使用相应的PropertyInfo符合条件的每列(即列名称为'xyz')。

我会建议一些代码,但你当前的例子很混乱,所以很难确切地说出你想要做什么。