在我的应用程序中,我的代码类似于以下内容:
Children
正如预期的那样,运行此代码会调用“方法”的第二个重载,即期望返回任务的函数委托。但是,如果我更改代码以避免在Main中使用匿名方法:
ChildrenBack
C#编译器现在抱怨我对'Method'的调用不明确。我错过了什么?
答案 0 :(得分:1)
答案很长,是https://stackoverflow.com/a/2058854/1223597(正如richzilla指出的那样)。
简短的回答是C#编译器团队选择进行方法组转换(如Method(Method2)
)忽略返回类型(此处为Method2
)。这为他们提供了解析Expression
树的灵活性。不幸的是,这意味着编译器不能在您的2个Method
签名之间隐式选择。
在进行lambda转换时,(Method(uri => Task.FromResult(uri))
),编译器团队不需要担心表达式树解析,所以他们做考虑返回类型。