Verwendung von "Datenelementen" in C # -9
Ich habe die neue Syntax für C # 9 ausprobiert, aber die Datenelemente nicht verwendet .
Dokumente sagen, dass die Syntax ist:
public data class Person { string FirstName; string LastName; }
Ich hatte jedoch die folgenden Kompilierungsfehler:
CS0116: A namespace cannot directly contain members such as fields or methods
IDE1007: The name 'data' does not exist in the current context.
Ich habe andere Syntaxen ausprobiert und sie haben alle funktioniert. Ich bin mir also sicher, dass ich C # -9 verwende
Update: Diese Frage wird als mögliche Antwort vorgeschlagen.
Aber es ist nicht meine Antwort und ich glaube, dass die akzeptierte Antwort in diesem Link falsch ist. Datensatztypen und Datenelemente sind zwei verschiedene Dinge. Datenelemente sind eine neue Methode zum Definieren unveränderlicher Typen, während die Datensatztypen Wertobjekte sind.
Dokumente legen nahe, dass Sie in den Datenelementklassen nur die Eigenschaften wie private Felder definieren müssen, sodass Person
Folgendes entspricht:
public data class Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
Antworten
data
Klassen werden jetzt aufgerufen record
. Es sind dieselben unveränderlichen Objekte, die sich wie Werttypen verhalten (strukturelle oder mit anderen Worten wertbasierte Gleichheit aufweisen).
In Bezug auf Ihren Code in OP,
public data class Person { string FirstName; string LastName; }
könnte umgeschrieben werden als
public record Person(string FirstName, string LastName);
Die obige Syntax verwendet den Primärkonstruktor . Wenn Sie den primären Konstruktor überspringen möchten, können Sie Datensätze auch als deklarieren
public record Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
In beiden Fällen konnten die Eigenschaften, Vorname und Nachname nur während der Initialisierung (entweder über den Konstruktor oder über Objektinitialisierer) und nicht danach zugewiesen werden.