【问题标题】:How do I create a delegate for generic list orderby function?如何为通用列表 orderby 函数创建委托?
【发布时间】:2011-11-08 18:54:54
【问题描述】:

我有一个项目正在使用自定义类的通用列表。我有这个绑定到一个网格,我正在尝试对其进行排序。 (正在工作)。

我想清理我的代码,这样我就不必检查“asc”和“desc”,然后调用 Orderby 或 OrderByDescending。我宁愿在函数的 to 处设置一个委托方法,然后调用 OrderMethod,它已经设置为正确的 OrderBy... 方法。

我似乎无法让它工作。

这是我创建的委托。 (该类称为“FollowingInfo”)。

private delegate IOrderedEnumerable<FollowingInfo> OrderMethodDelegate<TSource, TKey>(IEnumerable<FollowingInfo> source, Func<FollowingInfo, string> keySelector);

我正在尝试这样设置。

OrderMethodDelegate OrderMethod = FollowList.OrderBy;

但它不起作用...在此示例中,FollowList 的类型为 List(FollowingInfo)。

OrderBy 方法是泛型列表类的扩展方法,在 Enumerable 中定义。

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

对我哪里出错有任何想法吗?

【问题讨论】:

    标签: c# .net linq generics delegates


    【解决方案1】:

    定义为:

    private delegate IOrderedEnumerable<TSource> Func<TSource, TKey>(IEnumerable<TSource> source, Func<TSource, TKey> keySelector);
    

    您不能简单地通过替换TSource 参数来覆盖IEnumerable&lt;T&gt; 中定义的泛型方法。它不知道 FollowInfo 类。您可以为IEnumerable&lt;FollowingInfo&gt; 提供您自己的 OrderBy 扩展方法,并在其中使用这种委托。

    【讨论】:

    • 谢谢。我最终得到了不同的定义。
    • 私有函数, IOrderedEnumerable> OrderMethod;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多