我不确定如何创建此表达式:
(e => e.Prop1, e.Prop2, e.Prop3)
我想将这样的表达式传递给方法,这样我就可以遍历集合并提取属性名称。
伪方法:
public void ParseProperties<T>(The_Expression_being_Passed_In)
{
foreach(var member in expression.members)
{
.....
}
}
答案 0 :(得分:1)
您需要接受
类型的参数params Expression<Func<T, object>>[] expressions
所以你可以说
public void ParseProperties<T>(params Expression<Func<T, object>>[] expressions) {
foreach(var expression in expressions) {
expression.GetPropertyName();
}
}
你必须写GetPropertyName
; StackOverflow上的实现比比皆是。
你不能像你想要的那样称呼它。你不得不说
ParseProperties(e => e.Prop1, e => e.Prop2, e => e.Prop3);
答案 1 :(得分:-1)
你可以尝试这样的东西,但如果你试图使用值类型属性,它可能会爆炸,因为表达式很可能是一个强制转换表达式。
public PropertyInfo ParseProperty<T>(Expression<Func<T,object>> expr)
{
MemberExpression member;
if(expr == null)
throw new ArgumentNullException("expr");
if((member = expr.Body as MemberExpression) == null)
throw new ArgumentException("incorrect format");
return member.Member as PropertyInfo;
}
public PropertyInfo[] ParseProperties<T>(params Expression<Func<T,object>> expressions)
{
return Array.ConvertAll(expressions,ParseProperty);
}