c# - 传递 Func<TSource, TKey> keySelector 错误

标签 c# linq c#-3.0 delegates lambda

static void Main()
        {
string[] a = { "a", "asd", "bdfsd", "we" };
            a = a.OrderBy(fun).ToArray();
}

 private static int fun(string s)
        {
            return s.Length;
        }

它给出了编译时错误。我知道我们可以用这样的 Lambda 表达式来做到这一点。 a.OrderBy(s=>s.Length).ToArray(); 但我想通过定义不同的函数来做到这一点。我做错了什么?

最佳答案

表达式 fun 是一个无类型的表达式,称为方法组
由于方法组没有类型,编译器无法推断通用 OrderBy 方法的类型参数。

您需要显式传递类型参数,如下所示:

a = a.OrderBy<string, int>(fun).ToArray();

或者,

a = a.OrderBy(new Func<string, int>(fun)).ToArray();

关于c# - 传递 Func<TSource, TKey> keySelector 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2812018/

相关文章:

c# - MediatR CQRS - 如何处理不存在的资源(asp.net 核心 web api)

c# - 我应该在 LINQ 中使用两次 OrderByDescending 吗?

javascript - 以谓词表达式作为参数获取对 api 的请求

.net - 将 C#3 代码表示为 XML 中的抽象语法树

.net - 在 C# 中使用模式进行 XML 解析

c#-3.0 - 我们可以避免多个 if 吗?

javascript - 创建从 C# 到 JavaScript 的动态 JSON

c# - 异步等待直到加载表单以继续

c# - 如何比较 Sharepoint 列表项值?

c# - 使用 linq 将集合中的项目合并在一起