C# 为什么可以';我们不能使用表达式体构造函数吗?

C# 为什么可以';我们不能使用表达式体构造函数吗?,c#,c#-6.0,visual-studio-2015,C#,C# 6.0,Visual Studio 2015,使用C#6.0中的新表达式Bodied Members功能,我们可以采用如下方法: public void Open() { Console.WriteLine("Opened"); } …并将其更改为具有等效功能的简单表达式: public void Open() => Console.WriteLine("Opened"); 然而,对于构造函数来说,情况并非如此。这样的代码不会编译: private DbManager() => Console.WriteLine("

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

public void Open()
{
    Console.WriteLine("Opened");
}
…并将其更改为具有等效功能的简单表达式:

public void Open() => Console.WriteLine("Opened");
然而,对于构造函数来说,情况并非如此。这样的代码不会编译:

private DbManager() => Console.WriteLine("ctor");
这也不是:

private DbManager() => {}

是否有任何原因导致构造函数不能从expression bodied members功能中获益,并且必须以传统的方式声明?

这会让人困惑而不是有用。尤其是当您添加对另一个构造函数的调用时

以下是设计说明中的直接引用:

构造函数在标题中有语法元素,其形式为this(…)或base(…)初始值设定项,在胖箭头前面看起来很奇怪。更重要的是,构造函数几乎总是会对语句产生副作用,并且不会返回值

以更一般的方式:

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

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

private DbManager() => Console.WriteLine("ctor");

在c#7.0中运行良好

我只能在这里提供一个猜测。。。基本上,它们对构造函数的用处要小得多,而表达式体成员的主要用例是它们返回某些内容,而在构造函数中,您不返回任何内容。请注意,您的最后一个示例比只编写没有
=>
的代码要冗长得多。在C#6.0中放弃了一些关于构造函数的实验。C#7.0还计划了一些涉及构造函数的特性,这次决定不改变任何关于构造函数的内容。@Gigi他们从来都不是技术挑战。理由是它们“在一个胖箭头之前看起来很奇怪”。使用两个属性时不起作用:
List1=new List();List2=新列表()
@Kiquenet您可以使用元组模式模拟所需内容:
public List()=>(List1,List2)=(new List(),new List())