2010-08-24 68 views
8

我正在构建要包含在该类型的集合的导出中的类型的属性列表。我想这样做,而不使用字符串的属性名称。只有该类型的某些属性才会包含在列表中。我想做类似的事情:使用lambda而不是字符串属性名称选择模型属性

exportPropertyList<JobCard>.Add(jc => jc.CompletionDate, "Date of Completion"); 

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

回答

9

可以通过检查传入的表达获得PropertyInfo对象是这样的:。

​​

这是一个uncomplete实现,因为我不知道你想与物业到底该怎么做 - 但它确实展示了如何从表达式获取PropertyInfo - PropertyInfo对象包含有关该属性的所有元数据。此外,在将应用程序应用于生产代码之前,一定要将错误处理添加到上面(即防止表达式不是MemberExpression等)。

+0

谢谢!这是** Func **的* object *参数让我难住。 – ProfK 2010-08-24 17:18:49

+0

没问题 - 如果答案解决了您的问题,请记住将答案标记为已接受:-) – driis 2010-08-24 17:45:06

0

甲优越选择器配置看起来像这样:

public void MethodConsumingSelector<TContainer, TSelected>(Expression<Func<TContainer, TSelected>> selector) 
{ 
    var memberExpresion = expression.Body as MemberExpression; 
    var propertyInfo = memberExpression.Member as PropertyInfo; 
} 

这防止了被表达为从含一个Convert(x => x.ValueTypeProperty) UnaryExpression当你选择的目标值类型中通过。

请参阅SO here上有关UnaryExpression与MemberExpression的相关问题。

相关问题