今天我第一次看到了类似这样的东西:
private string m => string.Empty;
使用lambda表达式来初始化变量。为什么要这样做,有哪些好处?
这被称为表达式体属性,它只是getter-only属性的一种快捷方式:
private string m
{
get { return string.Empty; }
}
关于这种方法的好处,我想你可以把它看作是一种只为你节省了一些击键的语法糖。
请参阅Roslyn Wiki
这不是一个变量,而是一个表达式体属性。在你的情况下,它是一个只读属性,返回string.Empty
。
这与下面的代码等效:
private string m { get { return string.Empty; } }
这是C# 6.0中引入的新功能之一。其好处是代码更短,更简洁。特别是当您有一个具有许多简单只读属性的类时。
如果您想看这种语法的真实世界示例,请查看Eric Lippert的博客上的此帖子。正如您所看到的,那里有很多一行方法和属性。没有表达式主体的属性和成员,代码将更长。其中相当大的一部分将是花括号。
这实际上并不是变量初始化,而是将Lambda表达式"string.Empty"绑定到"m",因此每当您对"m"进行解引用时,它实际上会评估您的Lambda表达式。
如需进一步阅读,请查看此 GitHub 页面(Expression-bodied function member部分)。