为了说明解释让我们说我有一个具有Address类型的Address属性的Company对象。所以它会是这样的:
public class Company { Address CompanyAddress; } public class Address { int Number; string StreetName; }
现在我有一个适用于任何类型的对象类型的方法,我想从收到的对象中获取一个特定的属性,所以我正在尝试以下方法:
public string MyMethod(object myObject, string propertyName) { Type objectType = myObject.GetType(); object internalObject = objectType.GetProperty("Address"); Type internalType = internalObject.GetType(); PropertyInfo singleProperty = internalType.GetProperty("StreetName"); return singleProperty.GetValue(internalObject, null).ToString(); }
问题是internalType永远不是Address而是“System.Reflection.RuntimePropertyInfo”所以singleProperty总是为null;
我该如何做到这一点?
谢谢。
答案 0 :(得分:2)
您的代码存在的问题是internalObject
将是PropertyInfo
方法返回的GetProperty
对象。您需要获取该属性的实际值,因此调用GetValue
方法。
public string MyMethod(object myObject, string propertyName) {
Type objectType = myObject.GetType();
object internalObject = objectType.GetProperty("Address").GetValue(myObject, null);
Type internalType = internalObject.GetType();
PropertyInfo singleProperty = internalType.GetProperty("StreetName");
return singleProperty.GetValue(internalObject, null).ToString();
}
答案 1 :(得分:0)
internalObject只是一个PropertyInfo对象,就像singleProperty一样。
您应该使用相同的技术来提取实际对象:
PropertyInfo addressProperty = objectType.GetProperty("Address");
object interalObject = addressProperty.GetValue(myObject);
其余的都是正确的。