在阅读了相关的答案后,我仍有一个问题:
Lambda表达式是代替委托实例而编写的未命名方法。编译器会立即将lambda表达式转换为以下两者之一:
并没有太多相关的代码-只是试着玩玩-显然两者都匹配。我没想到这样因为我认为其中一个会更匹配。
这将导致错误(以下方法或属性之间存在歧义)
Lambda表达式是代替委托实例而编写的未命名方法。编译器会立即将lambda表达式转换为以下两者之一:
- 委托实例。
- 类型为Expression的表达式树,表示可遍历对象模型中lambda表达式内部的代码。
并没有太多相关的代码-只是试着玩玩-显然两者都匹配。我没想到这样因为我认为其中一个会更匹配。
void Main()
{
Foo( () => 0 );
}
void Foo(Func<int > action)
{
Console.WriteLine("1");
}
void Foo(Expression<Func<int>> func)
{
Console.WriteLine("2");
}
这将导致错误(以下方法或属性之间存在歧义)
delegate int Blah()
,并且有void Foo(Blah blah)
,情况也是一样的。 - leppieFunc<int>
或Expression<Func<int>>
,而且没有一种转换被认为是“更好”的。不清楚您在询问什么。 - Jon Skeet