如何获得" 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");
答案 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