Constructores sin parámetros en estructuras para C # 6


Entiendo que los constructores sin parámetros en estructuras ahora están permitidos.

Pero lo siguiente me da un error de compilación en VS 2015 Community

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) { } 
}

Error:"Structs cannot contain explicit parameterless constructors"

Alguien sabe por qué?

 23
Author: svick, 2015-06-26

2 answers

La característica estaba presente en previsualizaciones anteriores de C# 6.0, por lo que algunos artículos hablan de ella. Pero luego se eliminó y por lo que no está presente en la versión distribuida con VS 2015 RC.

Específicamente, el cambio fue revertido en pull request #1106, con más información sobre la justificación en issue #1029. Citando a Vladimir Sadov:

A medida que realizábamos más y más pruebas, seguíamos descubriendo casos en los que los constructores de estructuras sin parámetros causaban comportamiento inconsistente en bibliotecas o incluso en algunas versiones de CLR.

[…]

Después de reconsiderar los posibles problemas derivados de romper las suposiciones de larga data, decidimos que era mejor para nuestros usuarios restaurar el requisito de que los constructores de estructuras siempre tengan parámetros formales.

 39
Author: svick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-26 01:56:04

No estoy seguro de por qué, sin embargo, esto está permitido:

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

¿Eso resuelve tu problema?

 -1
Author: Lucas B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-28 21:48:37