2010-11-23 26 views
3

Actuellement, mon code ressemble à ceci:Comment puis-je déclarer un tableau non inscriptible en C#?

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

Cela me empêche d'attribuer à INTARRAY à une nouvelle instance de int[] en dehors du constructeur statique, mais il me permet encore à attribuer aux différents éléments int.
Par exemple:

INTARRAY[1] = 5; 

Comment puis-je faire ce tableau complètement en lecture seule? C'est un tableau de types valeur, et est assigné avec un initialiseur de tableau dans la déclaration. Comment puis-je faire en sorte que ces valeurs initiales persistent indéfiniment?

Répondre

9

Si c'est un tableau, vous ne pouvez pas. Mais si vous êtes prêt pour être un IList<int>, vous pouvez le faire:

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

Notez également que si vous en avez besoin en tant que tableau, vous utilisez simplement '.ToArray()' dans la liste. En outre, le type 'ReadonlyCollection' peut être utile, plutôt que' List', en fonction de l'utilisation que vous en faites. – Nobody

1

malheureusement, il n'y a pas de construction builtin C# qui fournit cette fonctionnalité pour les tableaux. La meilleure solution consiste à utiliser une liste à la place si elle répond aux besoins de votre entreprise

1

Si vous êtes absolument déterminé à utiliser un tableau, vous pouvez écrire une classe wrapper simple autour du tableau avec un accès en lecture seule indexer accédant aux éléments.