Возможно, самый чистый способ в этом случае - написать метод расширения.
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);