C# 如何使用分隔符在属性集合中编写lambda表达式?

C# 如何使用分隔符在属性集合中编写lambda表达式?,c#,lambda,C#,Lambda,我不确定如何创建此表达式: (e => e.Prop1, e.Prop2, e.Prop3) 我想将这样的表达式传递到一个方法中,这样我就可以遍历集合并提取属性名 伪方法: public void ParseProperties<T>(The_Expression_being_Passed_In) { foreach(var member in expression.members) { ..... } } public void P

我不确定如何创建此表达式:

(e => e.Prop1, e.Prop2, e.Prop3)
我想将这样的表达式传递到一个方法中,这样我就可以遍历集合并提取属性名

伪方法:

public  void ParseProperties<T>(The_Expression_being_Passed_In)
{
    foreach(var member in expression.members)
    {
       .....
    }
}
public void ParseProperties(传入的\u表达式\u)
{
foreach(expression.members中的var成员)
{
.....
}
}

您需要接受类型为的参数

params Expression<Func<T, object>>[] expressions

您可以尝试类似的方法,但如果您尝试使用值类型属性,则可能会遇到问题,因为表达式很可能是强制转换表达式

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);
}
publicpropertyinfo ParseProperty(表达式expr)
{
成员表达成员;
if(expr==null)
抛出新的ArgumentNullException(“expr”);
if((member=expr.Body作为MemberExpression)==null)
抛出新ArgumentException(“格式不正确”);
返回成员。成员作为PropertyInfo;
}
公共属性信息[]解析属性(参数表达式)
{
返回Array.ConvertAll(表达式,ParseProperty);
}

此实现非常不完整。在
StackOverflow
上已经有了这个方法的很好的实现,但事实并非如此。唯一缺少的是对表达式的检查。
ParseProperties(e => e.Prop1, e => e.Prop2, e => e.Prop3);
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);
}