zu schreiben Ich stoße ziemlich oft auf die Notwendigkeit für kleine unveränderliche Datenstrukturen. Andere würden wahrscheinlich Tupel in diesen Fällen verwenden, aber ich mag es wirklich nicht, dass Tuples nicht gut lesen und nicht so viel Bedeutung ausdrücken. Ein Value2
von int
sagt mir nichts.Kürzeste Möglichkeit, unveränderliche Struktur in C#
Ein Beispiel wäre das Erstellen einer Nachschlagetabelle (Dictionary) für eine Kombination von zwei Eigenschaften, d. H. Name
und Rating
.
Der kürzeste Weg, um eine unveränderliche Struktur für diese Fälle zu machen, die ich kenne, ist dies:
public struct Key
{
public string Name { get; private set; }
public int Rating { get; private set; }
public LolCat(string name, int rating) : this()
{
Name = name;
Rating = rating;
}
}
// useage
var key = new Key("MonorailCat", 5);
Meiner Meinung nach viel es noch ‚syntaktischem Fett‘ ist in hier, dass Ich mag würde loswerden. Ich könnte es viel lesbarer machen, wenn ich nur Felder direkt aussetzen würde.
Ich mag die Syntax von diesem, weil es kaum syntaktisches Fett gibt. Der große Nachteil ist natürlich, dass es nicht unveränderlich ist, mit all seinen Gefahren.
Im Idealfall würde ich nur für dieses eine besondere Art haben möge, mit dem realen absoluten Minimum an Definition, wie:
public immutable struct Key
{
string Name;
int Rating;
}
// useage (needs compiler magic)
var key = new Key(Name: "MonorailCat", Rating: 5);
Frage
Gibt es eine reale Welt Lösung etwas näher am Beispiel auf der Unterseite, um die Menge an syntaktischen Fett für eine sehr einfache unveränderliche Struktur zu reduzieren?
Warum verwenden Sie in diesem Fall keine Klasse? – Kao
Warum die Eigenschaften nicht als "readonly" -Felder verfügbar machen? Du würdest zumindest die '{get; private set;} '(und Sie benötigen immer noch den Konstruktor). – casperOne