我有以下代码:
class Program
{
static void Main(string[] args)
{
List<int> li = new List<int>() { 1,2,3,4,5,6,7,8,9,10 };
ProcessCollection(li, x => x);
}
static IEnumerable<TSource> ProcessCollection<TSource,TResult>(IEnumerable<TSource> c, Func<TSource, TResult> lambdaexp)
{
return c.OrderBy(lambdaexp);
}
}
如您所见,它获取一个集合,对其进行处理并返回新集合。它目前通过 OrderBy() 处理集合扩展方法。
我想扩展这个函数,让它接受另一个(第三个)参数作为函数,并将这个函数应用于作为第一个参数传递的集合。到目前为止,我正在尝试使用 Func<> 的组合和 Action<>但我无法解决。我还是初学者。
是否可以定义 ProcessCollection 的参数?这样它将根据作为参数传递的函数处理集合?
谢谢。
请您参考如下方法:
你可以这样做:
static IEnumerable<TElemType> Process<TElemType>(IEnumerable<TElemType> source,
params Func<IEnumerable<TElemType>, IEnumerable<TElemType>>[] funcs)
{
foreach(var func in funcs)
source = func(source);
return source;
}
然后像这样使用它:
List<int> li = new List<int>() { 1,2,3,4,5,6,7,8,9,10 };
Process(li, x => x.OrderBy(y => y), x => x.Reverse());
但我不太确定为什么这比只做更好:
li.OrderBy(y => y).Reverse()
