为什么lambdas&;不允许在is或as运算符的左侧使用匿名方法
本文关键字:方法 运算符 as amp lambdas 不允许 is 为什么 | 更新日期: 2023-09-27 18:26:16
Lambdas不允许出现在is的左侧或作为运算符。MSDN
如果能用一个真实的例子进行清楚的解释,那将不胜感激?
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指出,is
和as
不能与匿名方法和lambda表达式一起使用,因为在将它们推断为某个实际的委托类型或表达式树之前,它们没有类型。