为什么lambdas&;不允许在is或as运算符的左侧使用匿名方法

本文关键字:方法 运算符 as amp lambdas 不允许 is 为什么 | 更新日期: 2023-09-27 18:26:16

Lambdas不允许出现在is的左侧或作为运算符。MSDN

如果能用一个真实的例子进行清楚的解释,那将不胜感激?

为什么lambdas&;不允许在is或as运算符的左侧使用匿名方法

Lambdas没有类型,因此,使用一个运算符来检查没有类型的值的类型是没有意义的。

我怀疑这与以下情况无关:

Func<string> x = () => "";  
bool result = x is Func<string>;

但对于这种情况:

// This won't compile
if((() => "") is Func<string>)
{
}

或:

// This won't compile too
Func<string> func = (() => "") as Func<string>;

Lambda表达式和匿名方法本身没有类型,但在使用委托类型自动推理时它们很有用:

// C# compiler understands that the right part should be Func<string>
// because the expression signature and return value matches Func<string>
Func<string> func = () => "hello world";

MSDN指出,isas不能与匿名方法和lambda表达式一起使用,因为在将它们推断为某个实际的委托类型或表达式树之前,它们没有类型。