c# - 使用 lambda 语法覆盖

标签 c# lambda roslyn c#-6.0

考虑以下表达式:

public override string ToString() => "ABCDEFG";

编译成这样:

public override string ToString()
{
    return "ABCDEFG";
}

尽管这种语法是语法糖,但我本以为 ToString()等于Func<string>

Func<string> ToString = () => { return "ABCDEFG"; };

注意 Func<string>需要 return语句,但 ToString() 的 lambda 语法覆盖不会。

为什么覆盖的 Lambda 语法不需要使用 return

最佳答案

首先,它不是 lambda 表达式 - 它只是表达式体成员(在 C# 6 中引入)也使用 => 的语法。不过,它们涉及创建委托(delegate)实例或表达式树。

至于为什么不需要 return - 在 lambda 表达式中也不需要它,当它们是 expression-bodied lambda 表达式时:

Func<string> toString = () => "ABCDEFG";

自从在 C# 3 中引入 lambda 表达式以来一直如此,并且是迄今为止 LINQ 中最常见的情况,例如

var query = strings.Where(x => x.Length > 3)
                   .Select(x => x.ToUpperInvariant());

关于c# - 使用 lambda 语法覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31785324/

相关文章:

c# - 如何获取事件的字符串数组c#

c# - 什么是数组索引?

c# - 如何隐藏 dataGridView 中的特定列?

c# - 从表达式中获取父成员

java - 使用 Collectors.groupingBy 创建复杂对象

c++ - for_each 和转换

roslyn - Roslyn 是否启用或可能启用多种语言项目?

c# - 您如何像在代理中一样使用 webrequest/response 处理 cookie?

visual-studio - dotnet_diagnostics 和 dotnet_style_、csharp_ 等下的等效规则有什么区别?

visual-studio - 如何使用 Visual Studio 2019 为解决方案中的多个项目指定自定义代码分析规则集?