.GetProperty()可以用于登录属性中发送的属性吗?

时间:2013-08-08 14:48:01

标签: c# string getproperty

我正在使用此功能:

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的名称?

2 个答案:

答案 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;
    }