将Lambda表达式作为参数传递给方法?

似乎这是一个普遍的要求,但是我在任何地方都找不到解决方案.

我有一个方法,该方法将根据传递给它的参数对集合进行排序.

我想将’OrderBy’的内容传递给该方法,但无法解决该问题.

我尝试过的

我尝试了使用字符串的开关(即,如果您传递“名称”,则会按名称排序的情况出现),但是这感觉很“ hacky”且不必要.

我知道它就像Func< TEntity,TResult>之类的东西,但我不太明白.

伪代码:

GetOrderedCollection([NOT SURE] orderBy)
{
  return collection.OrderBy(orderBy);
}

解决方法:

OrderBy是具有以下签名的扩展方法:

public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
    this IEnumerable<TSource> source,
    Func<TSource, TKey> keySelector
)

(来源:https://msdn.microsoft.com/it-it/library/bb534966%28v=vs.110%29.aspx)

因此,您的方法需要一个Func作为其参数,其中TSource是List类型,而TKey是您的lambda返回的类型.
一个例子是:

public void Method<TSource, TKey>(List<TSource> list, Func<TSource, TKey> func)
        {
            ...
            IOrderedEnumerable<TSource> orderedEnumerable = list.OrderBy(func);
        }

编辑:
我还注意到,在您的示例代码中,您将方法声明为void,但是然后您试图返回IOrderedEnumerable.
如果您想取回有序集合,则您的方法至少需要具有IEnumerable类型(但这会破坏对它进行排序的目的,因为IEnumerables不能保证顺序.更可能的实现是返回List< TSource> ;并调用list.OrderBy(func).ToList()

上一篇:flink的souce方法


下一篇:python-使用串行对象作为参数的多进程