我想通过看起来像这样的路径得到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.CreateInstance
,GetProperties
和可能的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]);