正在检索表达式<;中引用的属性的完整命名空间;Func<>>;谓语
本文关键字:lt gt 命名空间 Func 谓语 引用 检索 表达式 属性 | 更新日期: 2023-09-27 18:28:40
我目前正在构建一个流畅的API,它以以下方式工作:
this.Property(x => x.Address).Display("Postal Address");
由于我需要在以后引用这些数据,我想将其添加到一个字典中,其中的关键字是ClassName.PropertyName
的格式(这似乎是在以后检索数据的最可靠的方法,尽管如果有更好的方法,我肯定会接受建议)。
例如,如果我有一个类如下:
namespace ExampleProject.Demo.ViewModels
{
public class ExampleViewModel
{
public string Address { get; set; }
}
}
Address属性的键将是后面跟有属性名称的名称空间,类似于:ExampleProject.Demo.ViewModels.Address.ExampleViewModel
。
然而,我很难通过从上面传递到Property(x => x)
方法的表达式中反射来获得完整的信息。有人能告诉我如何从Property方法的参数中检索这些数据吗?
Property
方法的签名如下:
public PropertyInstance<TProp> Property<TProp>(Expression<Func<TModel, TProp>> expression) where TProp : class
{
...
}
非常感谢
以下将检索属性:
var property = (PropertyInfo)(((MemberExpression)expression.Body).Member);
从中,您可以检索以下内容:
property.Name
property.DeclaringType.FullName or AssemblyQualifiedName
我宁愿在键中使用Type.AssemblyQualifiedName
,而不是按名称空间命名,以防不同的程序集包含相同的类型。