C# lambda变量初始化

28

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

private string m => string.Empty;

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


12
请注意,此语法仅适用于 C# 6.0 语言版本。 - Tamas Ionut
非常棒的新功能,依我看,它增加了更多的代码简洁性! - Daniel Hakimi
3个回答

26

这被称为表达式体属性,它只是getter-only属性的一种快捷方式:

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

关于这种方法的好处,我想你可以把它看作是一种只为你节省了一些击键的语法糖。

请参阅Roslyn Wiki


5
不仅可以节省按键,而且如果有很多按键,这种语法也更易于阅读——减少混杂。 (前提是读者熟悉这种语法。) - Bob

12

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

这与下面的代码等效:

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

这是C# 6.0中引入的新功能之一。其好处是代码更短,更简洁。特别是当您有一个具有许多简单只读属性的类时。

如果您想看这种语法的真实世界示例,请查看Eric Lippert的博客上的此帖子。正如您所看到的,那里有很多一行方法和属性。没有表达式主体的属性和成员,代码将更长。其中相当大的一部分将是花括号。


5

这实际上并不是变量初始化,而是将Lambda表达式"string.Empty"绑定到"m",因此每当您对"m"进行解引用时,它实际上会评估您的Lambda表达式。

如需进一步阅读,请查看此 GitHub 页面(Expression-bodied function member部分)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接