检索Expression <func <>&gt;中引用的属性的完整命名空间谓词</FUNC <>

时间:2014-10-31 13:46:54

标签: c#

我目前正在构建一个以下列方式工作的流畅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
{
    ...  
}

非常感谢

1 个答案:

答案 0 :(得分:4)

以下内容将检索该属性:

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

由此,您可以检索以下内容:

property.Name
property.DeclaringType.FullName or AssemblyQualifiedName

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