C#读取字符串中的类树路径并访问给定该类的实例的值

时间:2018-05-25 14:11:33

标签: c# reflection

在C#中,是否可以读取字符串中的类树路径并在给定该类的实例的情况下以编程方式访问值?

例如:

public class LogGeometricModel
{
  public double SmallEndDiameter { get; set; }
  public double LargeEndDiameter { get; set; }

public class Log
{
  public Guid Id { get; set; }
  public LogGeometricModel GeometricModel { get; set; }
}

public class Solution
{
  public DateTime TimeStamp { get; set; }
  public double Price { get; set; }
  public Log RotatedLog { get; set; }
}

字符串可能是这样的(类树中的路径):

SmallEndDiameter =“解决方案/ RotatedLog / GeometricModel / SmallEndDiameter”

LargeEndDiameter =“解决方案/ RotatedLog / GeometricModel / LargeEndDiameter”

价格 =“解决方案/价格”

Id =“解决方案/日志/ ID”

通过阅读这些字符串,我想访问SmallEndDiameter,LargeEndDiameter,Price和Id的实际值。

1 个答案:

答案 0 :(得分:2)

绝对可能是的。

public static object GetValue(object instance, string path)
{
    object currentObject = instance;
    foreach (string propertyName in path.Split('/'))
    {
        currentObject = currentObject
            .GetType()
            .GetProperty(propertyName)
            .GetValue(currentObject, null);
    }
    return currentObject;
}

您不需要在字符串中包含“解决方案”。这显然缺少错误处理,如果你要解析这样的字符串,你会想要。