C#面试题更新 2026-08-05

在 C# 中,匿名方法和 Lambda 表达式在语法和语义上有哪些主要区别?请说明它们的定义方式、适用场景以及编译器如何处理它们。

技术原理C#

考察说明

考查对 C# 匿名方法和 Lambda 表达式的理解,包括语法、语义和编译处理差异。

回答思路

  1. 【回答框架 1】匿名方法使用 delegate 关键字定义,例如 delegate(int x) { return x * 2; },而 Lambda 表达式使用 => 运算符,如 x => x * 2。Lambda 是匿名方法的进化形式,更简洁。
  2. 【回答框架 2】在 .NET 3.5 及以后,Lambda 表达式是推荐写法,编译器将 Lambda 转换为匿名方法或表达式树,取决于上下文。匿名方法则总是编译为委托实例。
  3. 【回答框架 3】匿名方法可以省略参数列表,例如 delegate { return 0; },而 Lambda 要求参数列表匹配。匿名方法可以访问外部变量,Lambda 同样支持闭包。
  4. 【回答框架 4】Lambda 可以用于表达式树(Expression<TDelegate>),匿名方法则不能。这使 Lambda 在 LINQ to SQL 等场景中更强大。
  5. 【回答框架 5】性能上两者生成的代码类似,但 Lambda 更简洁,减少冗余代码,推荐使用。
  6. 【关键点 1】Lambda 表达式是匿名方法的简化语法,功能更强大。
  7. 【关键点 2】匿名方法使用 delegate 关键字,Lambda 使用 =>。
  8. 【关键点 3】Lambda 可用于表达式树,匿名方法不能。
  9. 【关键点 4】两者都支持闭包,可以访问外部变量。
  10. 【关键点 5】实际开发中优先使用 Lambda。
  11. 【易错点 1】不要误认为 Lambda 只能用于委托,它还可用于表达式树。
  12. 【易错点 2】匿名方法可以省略参数,Lambda 必须匹配委托签名。
  13. 【易错点 3】在旧版本 C# 中,匿名方法可能更兼容,但现代环境应使用 Lambda。