如何通过名称获取实体的子属性

时间:2011-06-21 05:46:34

标签: c#

类中的

我与类Position有关系,类Position与类PositionTitle有关系,而PositionTitle有一个名为Title的属性

public class Person
{
   public Position Position{get;set;}
}

public class Position
{
   public PositionTitle PositionTitle{get;set;}
}

public class PositionTitle 
{
   public string Title{get;set;}
}

我有一个字符串“Person.Position.PositionTitle.Title”,我怎么能用这个字符串得到这个人的属性?

2 个答案:

答案 0 :(得分:6)

您需要按点分割字符串,然后使用反射按名称获取每个属性。您可以使用PropertyInfo.PropertyType获取属性的类型 - 然后使用它来获取链中的下一个属性。像这样:

public object GetProperty(object source, string path)
{
    string[] bits = path.Split('.');
    Type type = source.GetType(); // Or pass this in
    object result = source;
    foreach (string bit in bits)
    {
        PropertyInfo prop = type.GetProperty(bit);
        type = prop.PropertyType;
        result = prop.GetValue(result, null);
    }
    return result;
}

您可能想要为绑定标志等进行调整,但这是正确的基本想法。

答案 1 :(得分:1)

使用System.Reflection:

s = "Person.Position.PositionTitle.Title";

string[] split = s.Split(".");
int i = 0;

Type t = Type.GetType(split[0]);

object obj = null;

for (i=0; i < split.Count()-1; i++)
{
    PropertyInfo pi = t.getProperty(split[i+1]);
    pi.getValue(obj, null);
    t = pi.PropertyType();
}

result = (string)obj;