c#语言改进了重载解析

示例

下面的代码片段显示了在需要委托时传递方法组(而不是lambda)的示例。现在,重载解析将解决此问题,而不是由于C#6能够检查传递的方法的返回类型而引发模棱两可的重载错误。

using System;
public class Program
{
    public static void Main()
    {
        Overloaded(DoSomething);
    }

    static void Overloaded(Action action)
    {
       Console.WriteLine("overload with action called");
    }

    static void Overloaded(Func<int> function)
    {
       Console.WriteLine("overload with Func<int> called");
    }

    static int DoSomething()
    {
        Console.WriteLine(0);
        return 0;
    }
}

结果:

6.0

输出结果

Func <int>的重载称为

观看演示

5.0

错误

错误CS0121:以下方法或属性之间的调用不明确:“ Program.Overloaded(System.Action)”和“ Program.Overloaded(System.Func)”

C#6在以下情况下也可以很好地处理lambda表达式的精确匹配,这将导致C#5中的错误。

using System;

class Program
{
    static void Foo(Func<Func<long>> func) {}
    static void Foo(Func<Func<int>> func) {}

    static void Main()
    {
        Foo(() => () => 7);
    }
}