改善了過載解析度
以下程式碼段顯示了在期望委託時傳遞方法組(而不是 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);
}
}