Как написать лямбда-выражение взять в коллекцию свойств с помощью разделителя? - PullRequest
0 голосов
/ 25 сентября 2011

Я не уверен, как создать это выражение:

(e => e.Prop1, e.Prop2, e.Prop3)

Я хочу передать подобное выражение в метод, чтобы я мог перебирать коллекцию и извлекать имена свойств.

псевдо метод:

public  void ParseProperties<T>(The_Expression_being_Passed_In)
{
    foreach(var member in expression.members)
    {
       .....
    }
}

Ответы [ 2 ]

1 голос
/ 25 сентября 2011

Вам необходимо принять параметр типа

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);
0 голосов
/ 25 сентября 2011

вы можете попробовать что-то подобное, но это может взорвать вас, если вы попытаетесь использовать свойство типа значения, так как выражение, скорее всего, будет выражением приведения.

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...