反思 - 如何获得财产的属性?

时间:2017-09-28 21:38:25

标签: c# reflection

如何通过反射获得一些参数(或属性,如果它们被称为)?

MyObject x = new MyObject(...);
..........
var propInfo = x.GetType().GetProperty("something");
if (propInfo != null) {
    xyz= propInfo.GetValue(x,null).Metrics.Width //<------ gives error
}

1 个答案:

答案 0 :(得分:0)

GetValue返回object

你需要在调用其他成员之前强制转换它。

MyObject x = new MyObject(...);
//..........
var propInfo = x.GetType().GetProperty("something");
if (propInfo != null) {
    MyPropertyType xyz = (MyPropertyType)propInfo.GetValue(x,null);
    if(xyz != null) {
        double width = xyz.Metrics.Width;
    }
}

否则,您将继续使用dynamic对象。

MyObject x = new MyObject(...);
//..........
var propInfo = x.GetType().GetProperty("something");
if (propInfo != null) {
    dynamic xyz = propInfo.GetValue(x,null);
    if(xyz != null) {
        double width = xyz.Metrics.Width;
    }
}