Skip to main content
 首页 » 编程设计

c#之如何将 OrderBy()、Where() 等作为参数传递给处理集合

2024年01月26日22qq号

我有以下代码:

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()