C#6结构中的无参数构造函数

时间:2015-06-26 00:44:12

标签: c# c#-6.0

我的理解是现在允许结构中的无参数构造函数。

但是下面的代码在VS 2015社区中给出了编译错误

public struct Person 
{ 
    public string Name { get; } 
    public int Age { get; } 
    public Person(string name, int age) { Name = name; Age = age; } 
    public Person() : this("Jane Doe", 37) { } 
}

错误:"结构不能包含显式无参数构造函数"

任何人都知道为什么?

2 个答案:

答案 0 :(得分:40)

这个功能出现在C#6.0的旧版预览中,这就是为什么有些文章会谈论它的原因。但它随后被移除,因此在VS 2015 RC分发的版本中不存在。

具体而言,更改已在pull request #1106中恢复,有关issue #1029中基本原理的更多信息。引用弗拉基米尔·萨多夫:

  

随着我们进行越来越多的测试,我们不断发现无参数构造函数在库中甚至在某些版本的CLR中导致不一致行为的情况。

     

[...]

     

在重新考虑因违反长期假设而产生的潜在问题后,我们认为最好让我们的用户恢复结构构造函数的要求,使其始终具有形式参数。

答案 1 :(得分:-1)

但我不确定为什么允许这样做:

public struct Person 
{ 
    public string Name { get; } 
    public int Age { get; } 
    public Person(string name = null, int age = 0) { Name = name; Age = age; } 
}

这能解决您的问题吗?