在C#中,是lambda表达式对象吗?如果是这样,他们是什么类型的对象?
答案 0 :(得分:16)
Lambda表达式本身仅存在于源代码中。它们本身没有类型,这就是编译器始终坚持将它们转换为特定类型的原因。
这就是为什么这段代码无法编译的原因:
// No idea what type to convert to!
object x = y => y.Length;
但这样做:
Func<string, int> x = y => y.Length;
Lambda表达式始终转换为 委托类型或表达式树类型。同样,匿名方法总是转换为委托类型。
答案 1 :(得分:12)
是的,lambda表达式转换为delegate
或expression tree - 两者都是对象。
答案 2 :(得分:4)
Linq中的Lambda操作构建了所谓的表达式树。你可以读一下它here。
答案 3 :(得分:0)
这是一个匿名函数,必须符合某种代理。 msdn 所以,实际上,它们是某种委托类型的实例。