为什么匿名类不能有lambda属性,但它可以有一个Func<>属性?

时间:2011-11-14 21:46:03

标签: c#

我正在尝试学习C#对匿名类型的限制。请考虑以下代码:

  var myAwesomeObject = new {
      fn1 = new Func<int>(() => { return 5; }),
      fn2 = () => { return 5; } 
  };

所以我们有两个实际上是函数的属性:

  • fn1Func<int>返回5
  • fn2:返回5的lambda函数。

C#编译器很乐意使用fn1,但抱怨fn2:

  

无法将lambda表达式分配给匿名类型属性。

有人可以解释为什么一个没问题,但另一个不是吗?

1 个答案:

答案 0 :(得分:19)

因为编译器无法知道() => { return 5; }的类型;它可以是Func<int>,但它也可以是具有相同签名的任何其他委托(它也可以是表达式树)。这就是你必须明确指定类型的原因。