改善了重载分辨率
以下代码段显示了在期望委托时传递方法组(而不是 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;
}
}
结果:
Version = 6
输出
调用 Func <int>重载
Version = 5
错误
错误 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);
}
}