Jon*_*eet 20
我相信这里的意思是"更好的更好"规则,这些规则记录在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);
}
}
Run Code Online (Sandbox Code Playgroud)
使用C#5编译器(例如in c:\Windows\Microsoft.NET\Framework\v4.0.30319\),这会产生两个错误:
Test.cs(11,9):错误CS0121:以下方法或属性之间的调用不明确:
'Test.Foo(System.Action)'和'Test.Foo(System.Func)'
Test.cs(11, 13):错误CS0407:'int Test.Bar()'具有错误的返回类型
使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
657 次 |
| 最近记录: |