使用lambda而不是字符串属性名称选择模型属性

Pro*_*ofK 9 .net linq generics lambda

我正在构建一个类型的属性列表,以包含在该类型集合的导出中.我想这样做而不使用字符串作为属性名称.只有该类型的某些属性才会包含在列表中.我想做点什么:

exportPropertyList<JobCard>.Add(jc => jc.CompletionDate, "Date of Completion");
Run Code Online (Sandbox Code Playgroud)

我该如何实现这种通用的Add方法?顺便说一句,字符串是属性的描述.

dri*_*iis 10

您可以通过检查传入的Expression来获取PropertyInfo对象.类似于:

public void Add<T>(Expression<Func<T,object>> expression, string displayName)
{
    var memberExpression = expression.Body as MemberExpression;
    PropertyInfo prop = memberExpression.Member as PropertyInfo;
    // Add property here to some collection, etc ? 
}
Run Code Online (Sandbox Code Playgroud)

这是一个不完整的实现,因为我不知道你想要对该属性做什么 - 但它确实展示了如何从Expression获取PropertyInfo - PropertyInfo对象包含有关该属性的所有元数据.此外,在将其应用于生产代码之前,请务必在上面添加错误处理(即防止表达式不是MemberExpression等).