通过它的路径获取propertyInfo?

时间:2018-03-05 18:18:56

标签: c# system.reflection propertyinfo

我希望通过如下所示的路径获取propertyInfo

string path = "window.position.x";

这是一个例子:

PropertyInfo p = typeof(WindowManager).GetProperty(path);

WindowManager有一个名为" window"的属性,它有一个名为" position"的属性。它再次具有属性" x"。

有没有办法实现这个目标?不幸的是,GetProperty并不适合这样的道路。

3 个答案:

答案 0 :(得分:2)

您可以拆分path并迭代元数据。试试这段代码:

var type = typeof(WindowManager);
PropertyInfo property;
foreach (var prop in path.Split('.'))
{
    property = type.GetProperty(prop);
    if (property == null)
    {
        // log error
        break;
    }
    type = property.PropertyType;
}

// now property is x

请注意,您应该在每次迭代时检查property以确保您的路径有效

Demo

答案 1 :(得分:1)

您必须在分隔符(。)上拆分path以获取类,属性和子属性。

粘性部分是映射"窗口"到WindowManager。您将需要某种字典或散列表,将字符串名称映射到已知类型,以便您可以查找它们。

一旦你知道"根类型",反映其属性就是一个相对简单的反思练习。对于初学者,我可能会指向Activator.CreateInstanceGetProperties,可能还有Assembly.GetReferencedAssemblies,所有这些都记录在MSDN上。

注意:您的路径看起来接受全部小写。当您尝试将类型和属性名称相互映射时,这将非常重要。

答案 2 :(得分:0)

如果您确定路径正确,请使用此

string path = "window.position.x";
var pathArr = path.Split('.');
var property = typeof(WindowManager).GetProperty(pathArr[0]).PropertyType
                                    .GetProperty(pathArr[1]).PropertyType
                                    .GetProperty(pathArr[2]);