通过属性信息的路径获取它



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

string path = "window.position.x";

这里有一个例子:

PropertyInfo p = typeof(WindowManager).GetProperty(path);
WindowManager 有一个名为 "window" 的属性,

它有一个名为 "position" 的属性,该属性又具有 "x" 属性。

有没有办法做到这一点?不幸的是,GetProperty不适用于这样的路径。

您可以拆分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以确保您的路径有效

演示

您必须在

分隔符 (.( 上拆分path才能获得类、属性和子属性。

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

一旦你知道了"根类型",反思它的属性就是一个相对简单的反思练习。首先,我可能会指出Activator.CreateInstanceGetProperties,可能还有Assembly.GetReferencedAssemblies,所有这些都记录在MSDN上。

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

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

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

相关内容

  • 没有找到相关文章

最新更新