Enregistrements C # 9.0 - types de référence et constructeur non nullables
J'ai essayé juste un simple enregistrement:
#nullable enable
public record Product
{
public readonly string Name;
public readonly int CategoryId;
public readonly string Phone;
public readonly Address Address;
public readonly Manager Manager;
}
Je reçois des avertissements :
La propriété non nullable 'Name' n'est pas initialisée. Envisagez de déclarer la propriété comme nullable.
(identique pour tous les champs sauf CategoryId)
Fondamentalement, si je comprends bien, un constructeur acceptant et définissant tous les champs n'est pas généré automatiquement par le compilateur et (lorsque #nullable enable
j'utilise ) je dois l'écrire moi-même, c'est-à-dire:
public Product(string Name, int CategoryId, string Phone, Address Address, Manager Manager) {
this.Name=Name;
this.CategoryId=CategoryId;
...
}
Ma question est, est-ce correct? Je suis très surpris par cela car je pensais que le but était de rendre la création d'enregistrements comme celle-ci vraiment simple, et devoir écrire/maintenir le constructeur est très fastidieux, en particulier sur les gros enregistrements qui changent souvent. Ou est-ce que je manque quelque chose ici?
Réponses
Vous semblez attendre le constructeur principal généré automatiquement , mais il est généré automatiquement (et en général, vous bénéficiez de tous les avantages de l'enregistrement) lorsque vous utilisez les paramètres d'enregistrement dans la déclaration de type d'enregistrement , qui sont automatiquement mappés sur public getet initproperties et automatiquement initialisé à partir du constructeur principal, éliminant ainsi l'avertissement NRT.
Ce qui signifie que vous obtenez tout le sucre de type record en utilisant essentiellement la syntaxe normale du constructeur avec un record
mot-clé ajouté :
public record Product(string Name, int CategoryId, string Phone, Address Address, Manager Manager) { }