C#如何在运行时获取泛型类的属性值

时间:2017-12-05 14:48:07

标签: c# generics runtime

如何获得" strx"的价值和类型在运行时?在使用泛型时,无法在运行时获取单元格(属性)的值(由于代码的结果是" null")。

实施例

   public class Foo 
    {
        public int x, y;
        public string strx, stry;
    }

    public void GetCellValueByName<T>(GridView gridview, string name/)
    {
        T = (T)Activator.CreateInstance(typeof(T));

        object row = gridview.GetRow(gridview.GetSelectedRows()[0]);

        if (row != null && row is T) 
        {
            columnType = (T)gridview.GetRow(gridview.GetSelectedRows()[0]);
            PropertyInfo info = columnType.GetType().GetProperty(name);
            if (info != null) 
            {  // Here I got always null
                info.GetValue(columnType, null);
            }
        }
    }

string valueOfStrx = GetCellValueByName<Foo>(grid, "strx");

1 个答案:

答案 0 :(得分:1)

问题是在类Foo中,strx是一个字段(成员变量):

public string strx, stry;

在您的方法中,您尝试使用GetProperty,但这不会找到字段:

PropertyInfo info = columnType.GetType().GetProperty(name);

因此要么将成员更改为属性

public string strx { get; set; }
public string stry { get; set; }

或改为使用GetField

FieldInfo info = columnType.GetType().GetField(name);
// ...
info.GetValue(columnType); // Note that GetValue for a field does not take a second parameter