La mia comprensione è che i costruttori di Parameterless nelle strutture sono ora consentiti.
Ma quanto segue mi dà un errore di compilazione nella Community 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) { } }
Errore: “Le strutture non possono contenere costruttori senza parametri espliciti”
Qualcuno sa perché?
La funzione era presente nelle anteprime precedenti di C # 6.0, motivo per cui alcuni articoli ne parlano. Ma è stato rimosso e quindi non è presente nella versione distribuita con VS 2015 RC.
Nello specifico, la modifica è stata ripristinata nella richiesta pull # 1106 , con ulteriori informazioni sulla motivazione nel numero 1029 . Citando Vladimir Sadov:
Mentre eseguivamo sempre più test, continuammo a scoprire casi in cui i costruttori di struct senza parametri causavano comportamenti inconsistenti nelle librerie o persino in alcune versioni di CLR.
[…]
Dopo aver riconsiderato i potenziali problemi derivanti dalla rottura di ipotesi di vecchia data, abbiamo deciso che era meglio per i nostri utenti ripristinare il requisito sui costruttori di struct di avere sempre parametri formali.
Non sono sicuro del perché, tuttavia, questo è permesso:
public struct Person { public string Name { get; } public int Age { get; } public Person(string name = null, int age = 0) { Name = name; Age = age; } }
Questo risolve il tuo problema?