下面的代码片段显示了在需要委托时传递方法组(而不是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; } }
结果:
输出结果
Func <int>的重载称为
观看演示
错误
错误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); } }