在C#6的所有新功能中,(对我而言)最神秘的功能是“改进的重载分辨率”。

也许是因为我couldn't find相关的信息/示例/解释。



看着roslyn wiki



所以我问:

问题:

改进的过载分辨率在C#6中如何发挥作用?它与C#5有什么区别(示例?文档?)

最佳答案

我相信这是documented in the Roslyn github repo的“更好的规则”。

样例代码:

using System;

class Test
{
    static void Foo(Action action) {}
    static void Foo(Func<int> func) {}
    static int Bar() { return 1; }

    static void Main()
    {
        Foo(Bar);
    }
}

使用C#5编译器(例如c:\Windows\Microsoft.NET\Framework\v4.0.30319\),这会产生两个错误:



使用C#6编译器,可以很好地进行编译。

同样,对lambda表达式使用精确匹配,这会在C#5编译器中产生模棱两可的重载错误,但对于C#6不会:
using System;

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

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

关于c# - C#6改进的重载分辨率-澄清吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35114291/

10-13 01:54