我与类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”,我怎么能用这个字符串得到这个人的属性?
答案 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;