【问题标题】:Get the propertyInfo by the path to it?通过它的路径获取propertyInfo?
【发布时间】:2018-03-05 18:18:56
【问题描述】:

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

string path = "window.position.x";

这里是一个例子:

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

WindowManager 有一个名为“window”的属性,它有一个名为“position”的属性,它又具有属性“x”。

有什么方法可以实现吗?不幸的是GetProperty 不适用于这样的路径。

【问题讨论】:

  • 你试过了吗:Environment.GetEnvironmentVariables("Path")

标签: c# system.reflection propertyinfo


【解决方案1】:

您可以拆分 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

【讨论】:

    【解决方案2】:

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

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

    一旦你知道了“根类型”,反射它的属性就是一个相对简单的反射练习。对于初学者,我可能会将您指向 Activator.CreateInstanceGetProperties 和可能的 Assembly.GetReferencedAssemblies,所有这些都记录在 MSDN 上。

    注意:您的路径看起来接受所有小写字母。当您尝试将类型和属性名称相互映射时,这一点很重要。

    【讨论】:

    • 非常感谢!我明白了,并会尝试实施它
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-01
      • 1970-01-01
      • 2011-02-16
      • 2017-01-14
      • 2019-01-16
      相关资源
      最近更新 更多