Comment utiliser les «membres de données» en C # -9

Nov 19 2020

J'essayais la nouvelle syntaxe pour C # 9 mais je n'ai pas réussi à utiliser les membres Data .

Les documents indiquent que la syntaxe est:

public data class Person { string FirstName; string LastName; }

Cependant, j'ai rencontré les erreurs de compilation suivantes:

CS0116: A namespace cannot directly contain members such as fields or methods
IDE1007: The name 'data' does not exist in the current context.

J'ai essayé d'autres syntaxes et elles ont toutes fonctionné. Donc, je suis sûr que j'utilise C # -9

Mise à jour: Cette question est suggérée comme réponse possible.

Mais ce n'est pas ma réponse et je crois que la réponse acceptée dans ce lien est fausse. Les types d'enregistrement et les membres de données sont deux choses différentes. Les membres de données constituent une nouvelle façon de définir des types immuables, tandis que les types d'enregistrement sont des objets de valeur.
Les documents suggèrent que dans les classes de membres de données, il vous suffit de définir les propriétés telles que les champs privés, de sorte que le Personest égal à:

public data class Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}

Réponses

2 AnuViswan Nov 19 2020 at 14:30

datales classes sont maintenant appelées record. Ce sont les mêmes objets immuables qui se comportent comme des types valeur (présentant une égalité structurelle ou en d'autres termes basée sur des valeurs).

Concernant votre code dans OP,

public data class Person { string FirstName; string LastName; }

pourrait être réécrit comme

public record Person(string FirstName, string LastName);

La syntaxe ci-dessus utilise le constructeur principal . Si vous souhaitez ignorer le constructeur principal, vous pouvez également déclarer les enregistrements comme

public record Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}

Dans les deux cas, les propriétés, le prénom et le nom ne peuvent être attribués que lors de l'initialisation (via le constructeur ou les initialiseurs d'objet) et non après cela.