首页 >后端开发 >C++ >为什么在没有显式类型声明的情况下隐式类型变量('var')不能保存匿名方法?

为什么在没有显式类型声明的情况下隐式类型变量('var')不能保存匿名方法?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-31 19:25:10600浏览

Why Can't Implicitly Typed Variables ('var') Hold Anonymous Methods Without Explicit Type Declaration?

为什么不能将匿名方法分配给隐式类型“Var”推断的变量?

考虑以下代码:

Func<string, bool> comparer = delegate(string value) {
    return value != "0";
};

此代码编译成功,因为 lambda 的推断类型表达式是一个 Func 委托。但是,以下代码无法编译:

var comparer = delegate(string value) {
    return value != "0";
};

在这种情况下,编译器无法推断 lambda 表达式的委托类型。这是因为可以推断出无限多种可能的委托类型,而编译器没有足够的上下文来确定要使用哪一种委托类型。

例如,lambda 表达式可以是 Func、谓词 或操作。此外,lambda 表达式可以是 Expression> 类型,它表示表达式树ではなく、委托型です。

要解决此问题,请显式指定 委托类型lambda 表达式:

var comparer = (Func<string, bool>)delegate(string value) {
    return value != "0";
};

通过此更改,代码将成功编译,并且lambda 表达式的推断类型将为 Func.

以上是为什么在没有显式类型声明的情况下隐式类型变量('var')不能保存匿名方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn