Jak używać „członków danych” w języku C # -9

Nov 19 2020

Próbowałem nowej składni C # 9, ale nie udało mi się użyć członków danych .

Dokumenty mówią, że składnia jest następująca:

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

Jednak napotkałem następujące błędy kompilacji:

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

Próbowałem innych składni i wszystkie działały. Jestem więc pewien, że używam C # -9

Aktualizacja: to pytanie jest sugerowane jako możliwa odpowiedź.

Ale to nie jest moja odpowiedź i uważam, że zaakceptowana odpowiedź w tym linku jest błędna. Typy rekordów i członkowie danych to dwie różne rzeczy. Członkowie danych to nowy sposób definiowania niezmiennych typów, podczas gdy typy rekordów to obiekty wartości.
Dokumenty sugerują, że w klasach składowych danych wystarczy zdefiniować właściwości, takie jak pola prywatne, więc Personjest równe:

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

Odpowiedzi

2 AnuViswan Nov 19 2020 at 14:30

dataklasy są teraz nazywane record. Są to te same, niezmienne obiekty, które zachowują się jak typy wartości (wykazując strukturalną lub innymi słowy równość opartą na wartości).

Odnośnie twojego kodu w OP,

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

można przepisać jako

public record Person(string FirstName, string LastName);

Powyższa składnia używa podstawowego konstruktora . Jeśli chcesz pominąć główny konstruktor, możesz również zadeklarować rekordy jako

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

W obu przypadkach Właściwości, FirstName i LastName można przypisać tylko podczas inicjalizacji (za pośrednictwem konstruktora lub inicjatorów obiektów), a nie później.