首页 > 后端开发 > C++ > 为什么我不能在 C# 中将匿名方法分配给'var”?

为什么我不能在 C# 中将匿名方法分配给'var”?

Susan Sarandon
发布: 2025-01-02 17:10:42
原创
629 人浏览过

Why Can't I Assign Anonymous Methods to `var` in C#?

匿名方法赋值给 var 的限制

在 C# 中,匿名方法提供了一种定义内联函数的便捷方法。虽然这些方法可以轻松分配给委托类型,但尝试将它们分配给隐式类型变量(使用 var)通常会导致编译器错误。

考虑以下代码示例:

Func<string, bool> comparer = delegate(string value) {
    return value != "0";
};
登录后复制

此代码成功编译,因为匿名方法被显式分配给 Func代表。但是,以下代码会引发编译器错误:

var comparer = delegate(string value) {
    return value != "0";
};
登录后复制

错误:

无法将匿名方法分配给隐式类型的局部变量。

发生此错误的原因是编译器无法推断匿名方法的类型。它可以表示无数种可能的委托类型,包括 Func、Predicate、Action 和无数其他类型。

此外,即使编译器推断出 Func作为预期的委托类型,它会与匿名方法具有不同数量的参数的情况产生不一致。例如,以下代码也将编译为 Func delegate:

var comparer = delegate(string arg1, string arg2, string arg3, string arg4, string arg5) {
    return false;
};
登录后复制

但是,这没有意义,因为 Func .NET 3.5 中委托最多支持四个参数。

要解决此问题并确保匿名方法编译为正确的委托类型,需要在赋值语句中显式指定委托类型,如第一个代码示例所示。

以上是为什么我不能在 C# 中将匿名方法分配给'var”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板