为什么我们不能使用表达式构造函数?

Gig*_*igi 11 c# c#-6.0 vs-2015-preview

使用C#6.0中新的Expression-Bodied Members功能,我们可以采用如下方法:

public void Open()
{
    Console.WriteLine("Opened");
}
Run Code Online (Sandbox Code Playgroud)

...并将其更改为具有同等功能的简单表达式:

public void Open() => Console.WriteLine("Opened");
Run Code Online (Sandbox Code Playgroud)

然而,对于构造函数而言,情况并非如此.像这样的代码不能编译:

private DbManager() => Console.WriteLine("ctor");
Run Code Online (Sandbox Code Playgroud)

这也不是:

private DbManager() => {}
Run Code Online (Sandbox Code Playgroud)

有没有理由为什么构造函数不能从表达体成员特征中受益,并且必须以传统方式声明?

i3a*_*non 14

它会比实用更令人困惑.特别是当您向另一个构造函数添加调用时.

这是设计说明的直接引用:

构造函数在头部中以这个(...)或base(...)初始化器的形式具有语法元素,这些元素在胖箭头之前看起来很奇怪.更重要的是,构造函数几乎总是副作用语句,并且不返回值.

2013年11月4日的C#设计说明

以更一般的方式:

总而言之,表达式主体允许在方法和用户定义的运算符(包括转换)上,它们表示从函数返回的值,以及属性和索引器,它们表示从getter返回的值,并暗示没有setter .


Krz*_*ona 5

现在已经发布了c#7.0,现在可以使用表达式主体的构造函数了。

private DbManager() => Console.WriteLine("ctor");
Run Code Online (Sandbox Code Playgroud)

在c#7.0中工作正常

  • @Kiquenet您可以使用元组模式来模拟所需的内容:`public Lists()=>(List1,List2)=(新的List <string>(),新的List <string>())` (2认同)