Erstens tun Sie wirklich eine veränderbare Struktur haben müssen? Sie sind böse. Ebenso öffentliche Felder.
Other than that, würde ich erstellen Sie einfach einen Konstruktor die zwei Bits von Daten unter:
class SomeClass
{
struct MyStruct
{
private readonly string label;
private readonly int id;
public MyStruct (string label, int id)
{
this.label = label;
this.id = id;
}
public string Label { get { return label; } }
public string Id { get { return id; } }
}
static readonly IList<MyStruct> MyArray = new ReadOnlyCollection<MyStruct>
(new[] {
new MyStruct ("a", 1),
new MyStruct ("b", 5),
new MyStruct ("q", 29)
});
}
Beachten Sie die Verwendung von ReadOnlyCollection anstelle der Anordnung des Aussetzens selbst - das wird es unveränderlich machen, die Vermeidung the problem exposing arrays directly. (Die Code-Show initialisiert ein Array von Strukturen - es übergibt dann einfach den Verweis auf den Konstruktor ReadOnlyCollection<>
.)
@ Chris initialisieren: Nein, ich würde sagen, dass es weit mehr als nur öffentlich Verbrauch APIs geht. Wie groß ist dein Team? Arbeiten Sie immer für diese Firma? Wie sicher bist du, dass * jedes Mitglied deines Teams * jetzt und für immer die vielen und unterschiedlichen Ungerade veränderbarer Strukturen versteht? Für Wegwerf-Code würde ich zustimmen ... aber der meiste Code lebt viel länger im Wartungsmodus als wir ursprünglich erwarten, und schlechtes Design kann es schwerer machen, das später zu entwirren. Du findest, dass jemand ein Feld als Referenz weitergegeben hat und dann kannst du keine Eigenschaften umstrukturieren, ohne es zu zerstören usw. –
Awesome John, du hast mir gerade einen neuen Blickwinkel der modernen objektorientierten Programmierung eröffnet. Danke .. – Adarsha
Es ist eine Schande, dass hier so viel extra tippen ist. In C++ 11 kann ich tun: 'struct foo {int i; const char * str; Zeichen c; }; foo f [] = {{1, "Hallo", "c"}, {2, "Auf Wiedersehen", "d" "}};' Es wäre nett, wenn man den Konstruktor nicht schreiben müsste oder muss "new foo" so viel schreiben. – Bklyn