传递Func <TSource,TKey> keySelector错误

fre*_*eak 3 c# linq lambda delegates c#-3.0

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

 private static int fun(string s)
        {
            return s.Length;
        }
Run Code Online (Sandbox Code Playgroud)

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

SLa*_*aks 6

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

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

a = a.OrderBy<string, int>(fun).ToArray();
Run Code Online (Sandbox Code Playgroud)

要么,

a = a.OrderBy(new Func<string, int>(fun)).ToArray();
Run Code Online (Sandbox Code Playgroud)

  • 嗯,我用我的好东西'VS2008重试它,你似乎是正确的.所以我想在VS2010下使用.NET 3.5项目我实际上正在编译C#4编译器,不知道这一点. (2认同)