我正在尝试学习C#对匿名类型的限制。请考虑以下代码:
var myAwesomeObject = new {
fn1 = new Func<int>(() => { return 5; }),
fn2 = () => { return 5; }
};
所以我们有两个实际上是函数的属性:
fn1
:Func<int>
返回5
。fn2
:返回5
的lambda函数。C#编译器很乐意使用fn1,但抱怨fn2:
无法将lambda表达式分配给匿名类型属性。
有人可以解释为什么一个没问题,但另一个不是吗?
答案 0 :(得分:19)
因为编译器无法知道() => { return 5; }
的类型;它可以是Func<int>
,但它也可以是具有相同签名的任何其他委托(它也可以是表达式树)。这就是你必须明确指定类型的原因。