正在检索表达式<;中引用的属性的完整命名空间;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
{
    ...  
}

非常感谢

正在检索表达式<;中引用的属性的完整命名空间;Func<>>;谓语

以下将检索属性:

var property = (PropertyInfo)(((MemberExpression)expression.Body).Member);

从中,您可以检索以下内容:

property.Name
property.DeclaringType.FullName or AssemblyQualifiedName

我宁愿在键中使用Type.AssemblyQualifiedName,而不是按名称空间命名,以防不同的程序集包含相同的类型。