C# lambda 变量初始化

C# lambda variable initialization

今天第一次看到类似这样的东西:

private string m => string.Empty;

使用 lambda 来初始化变量。为什么要这样做,有什么好处?

这实际上不是变量初始化,它将 lambda 表达式 "string.Empty" 绑定到 "m",因此无论何时您取消引用 "m",它实际上都会计算您的 lambda 表达式。

如需进一步阅读,请查看 this github page(第 "Expression-bodied function member" 部分)

它不是一个变量,它是一个表达式体属性。只读 属性,在您的情况下返回 string.Empty

相同
private string m { get { return string.Empty; } }

这是 C# 6.0 中引入的新功能之一。好处是代码更短、更简洁。特别是如果你有一个 class 有很多简单的只读属性。

如果您想查看此语法的真实示例,请查看 this post on Eric Lippert's blog。如您所见,那里有很多单行方法和属性。如果没有 expression-bodied 属性和成员,代码会更长。其中相当一部分是花括号。

它被称为 Expression-Bodied Properties,它只是 getter-only 属性的快捷方式:

private string m
{
    get { return string.Empty; }
}

至于这种方法的好处,我想您可以将其视为只是为您节省一些击键次数的语法糖。

Roslyn Wiki