Как передать выражение System.Linq.LambdaExpression? - PullRequest
2 голосов
/ 21 февраля 2012

У меня есть такой метод:

public List<MyObjects> All<TEntity>(params LambdaExpression[] exprs)

с намерением назвать его так:

All<SomeObject>(a => a.Collection1, a=> a.Collection2, a=>a.Collection3);

Однако моя сигнатура метода не принимаетвыражение правильно.Что я делаю неправильно?Как мне написать сигнатуру метода, чтобы получить желаемый эффект?

отредактировано: я понял, что мой пример вызова метода не точно отражает то, что я пытался сделать в реальной жизни:)

спасибо !!

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

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

public static class MyExtensions
{
    public static List<TEntity> All<TEntity, TResult>(
        this TEntity entity,
        params Func<TEntity, TResult>[] exprs)
    {
        if (entity == null)
        {
            throw new ArgumentNullException("entity");
        }
        if (exprs == null)
        {
            throw new ArgumentNullException("exprs");
        }

        // TODO: Implementation required
        throw new NotImplementedException();
    }
}

Обратите внимание, что вам не нужно указывать аргументы типа при вызове метода из-за вывода типа.

class C
{
    public List<string> Collection1 {get; set;}
    public List<string> Collection2 {get; set;}
    public List<string> Collection3 {get; set;}
    // ...
}
// ...
var c = new C();            
c.All(x => x.Collection1, x => x.Collection2, x => x.Collection3);
1 голос
/ 21 февраля 2012

Вы имели в виду что-то вроде

public List<MyObjects> All(params Action<ICollection>[] exprs)

All(a => new List<int>(), b => new List<string>(), c => new List<bool>()); 
...