我正在使用此功能:
public static Object GetDate(this Object src, string propName)
{
return src.GetType().GetProperty(propName).GetValue(src, null);
}
假设发送propName =“Name”,src例如是'Person'对象。 此函数工作正常,因为返回返回的值是'Person'中字段'Name'的值。 但现在我需要登录到其他属性内部的属性。例如,propName =“State.Country.Name”
(州和国家是其他对象) 然后,如果我通过传递propName =“State.Country.Name”和src = Person来使用该函数 (Persona是一个对象)该函数将返回Country的名称?
答案 0 :(得分:0)
请注意,这是未经测试的。我不记得正确的语法,但你可以尝试:
public static Object GetValue(this Object src)
{
return src.GetType().GetProperty(src.ToString()).GetValue(src, null);
}
基本上,您只是将属性的实例传递给扩展方法 - 请参阅没有传递属性名称:
Person p = new Person();
var personCountry = p.State.Country.GetValue();
希望它有效!
答案 1 :(得分:0)
这很好用:
static object GetData(object obj, string propName)
{
string[] propertyNames = propName.Split('.');
foreach (string propertyName in propertyNames)
{
string name = propertyName;
var pi = obj
.GetType()
.GetProperties()
.SingleOrDefault(p => p.Name == name);
if (pi == null)
{
throw new Exception("Property not found");
}
obj = pi.GetValue(obj);
}
return obj;
}