与委托调用不明确的C#方法

时间:2015-08-27 08:17:59

标签: c# compiler-errors delegates ambiguous

在我的应用程序中,我的代码类似于以下内容:

Children

正如预期的那样,运行此代码会调用“方法”的第二个重载,即期望返回任务的函数委托。但是,如果我更改代码以避免在Main中使用匿名方法:

ChildrenBack

C#编译器现在抱怨我对'Method'的调用不明确。我错过了什么?

1 个答案:

答案 0 :(得分:1)

答案很长,是https://stackoverflow.com/a/2058854/1223597(正如richzilla指出的那样)。

简短的回答是C#编译器团队选择进行方法组转换(如Method(Method2))忽略返回类型(此处为Method2)。这为他们提供了解析Expression树的灵活性。不幸的是,这意味着编译器不能在您的2个Method签名之间隐式选择。

在进行lambda转换时,(Method(uri => Task.FromResult(uri))),编译器团队不需要担心表达式树解析,所以他们考虑返回类型。