2010-11-23 14 views
3

Derzeit ähnelt mein Code folgendermaßen aus:Wie kann ich ein nicht beschreibbares Array in C# deklarieren?

private static readonly int[] INTARRAY = {1, 2, 3}; 

Dies verhindert, dass ich INTARRAY auf eine neue Instanz von int[] außerhalb des statischen Konstruktor aus zuweisen, aber es immer noch erlaubt, mich zu den einzelnen int Elementen zuweisen.
Zum Beispiel:

INTARRAY[1] = 5; 

Wie kann ich dieses Array machen vollständig schreibgeschützt? Dies ist ein Array von Werttypen, dem in der Deklaration ein Array-Initialisierer zugewiesen ist. Wie kann ich diese Anfangswerte unbegrenzt beibehalten?

Antwort

9

Wenn es ein Array ist, können Sie nicht. Aber wenn Sie bereit sind, denn es ist ein IList<int> zu sein, können Sie tun:

private static readonly IList<int> INTARRAY = new List<int> {1, 2, 3}.AsReadOnly(); 
+0

Beachten Sie auch, dass Sie, wenn Sie es als Array benötigen, einfach '.ToArray()' auf der Liste verwenden. Je nach dem, wofür Sie es verwenden, ist auch der Typ "ReadonlyCollection" sinnvoller als "List". – Nobody

1

leider kein builtin C# Konstrukt, das diese Funktion für Arrays zur Verfügung stellt. Die beste Lösung besteht darin, stattdessen eine Liste zu verwenden, wenn sie Ihren Geschäftsanforderungen entspricht.

1

Wenn Sie unbedingt ein Array verwenden möchten, können Sie eine einfache Wrapper-Klasse mit einem schreibgeschützten indexer auf die Elemente schreiben.