具有正文的lambda表达式的确切类型是什么?

Ami*_*ash 4 .net c# lambda

Windows窗体扩展方法Invoke()不接受lambda表达式,我们不必首先将它类型转换为类似Action的委托类型.这让我想知道,如果lambda表达式(带有主体)不是显式委托或表达式,它的类型是什么?

Jon*_*eet 6

这让我想知道,如果lambda表达式(带有主体)不是显式委托或表达式,它的类型是什么?

它没有正常意义上的单词类型(即CLR类型),就像null没有类型一样.(较旧版本的C#规范具有"null类型"的概念,但已被删除.)

相反,它是一个可转换为任何兼容的具体委托或表达式树类型的表达式.

有关详细信息,请参阅C#5规范的第7.1节("表达式分类") - 相关的要点(表达类型列表中)是:

  • 空文字.具有此分类的表达式可以隐式转换为引用类型或可空类型.
  • 一个匿名函数.具有此分类的表达式可以隐式转换为兼容的委托类型或表达式树类型.