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

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

DDD
DDD原创
2024-12-29 03:53:10778浏览

Why Can't I Assign an Anonymous Method to a `var` Variable in C#?

为什么匿名方法不能赋值给 Var

当遇到像这样的匿名方法时:

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

编译器是面临挑战。与类型化 lambda 表达式不同,例如:

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

匿名方法不会显式指定委托类型。编译器必须根据方法的签名推断该类型。但是,满足这些条件的潜在委托类型有无限多种,且具有不同的参数和返回值。

推断匿名方法的类型会带来几个问题:

  • 缺乏一致性: 将 lambda 表达式分配给 var 意味着对 Func 的推断。类型。然而,对于匿名方法,没有这样的优先级,导致处理多个参数情况时不一致。
  • 歧义:在像 var x2 = y => 这样的情况下123,编译器无法确定参数类型。
  • 未定义的返回类型:某些匿名方法具有未指定的返回类型,可以是任何引用或可为 null 的值类型。
  • 不可确定的函数作用域:在 var x5 = (int y) 等情况下,无法区分语句 lambda 和函数=> q = y.
  • 特殊语法和限制:使用匿名方法需要 delegate 关键字,与 lambda 表达式相比,添加了不必要的语法。委托形式还缺少表达式树和消息传递等功能。

因此,编译器错误“无法将匿名方法分配给隐式类型的局部变量”会阻止将 var 与匿名方法一起使用。

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

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