2010-09-30 11 views
15

Lese über das Problem eine Lese nur primitiven Vektor in C# zu schaffen (im Grunde können Sie nicht tun),Warum gibt es keine Klasse ReadOnlyList <T> in der Bibliothek System.Collections von C#?

public readonly int[] Vector = new int[]{ 1, 2, 3, 4, 5 }; // You can still changes values 

Ich lernte über ReadOnlyListBase. Dies ist eine Basisklasse für Container mit Objekten, auf die ihre Positionen zugreifen, aber nicht geändert werden können. Sogar gibt es ein Beispiel in der Microsoft msdn.

http://msdn.microsoft.com/en-us/library/system.collections.readonlycollectionbase.aspx

ich leicht modifiziert das Beispiel in Msdn jede Art zu verwenden:

public class ReadOnlyList<T> : ReadOnlyCollectionBase { 
    public ReadOnlyList(IList sourceList) { 
     InnerList.AddRange(sourceList); 
    } 

    public T this[int index] { 
     get { 
     return((T) InnerList[ index ]); 
     } 
    } 

    public int IndexOf(T value) { 
     return(InnerList.IndexOf(value)); 
    } 



    public bool Contains(T value) { 
     return(InnerList.Contains(value)); 
    } 

} 

... und es funktioniert. Meine Frage ist, warum existiert diese Klasse nicht in der Standardbibliothek von C#, wahrscheinlich in System.Collections.Generic? Vermisse ich es? Wo ist es? Danke.

+1

Update 2015: .NET 4.5 hat jetzt ImmutableList https://msdn.microsoft.com/en-us/library/dn467185(v=vs.111).aspx –

Antwort

18

Es gibt ReadOnlyCollection<T>, die die generische Version der oben genannten ist.

Sie können einen von einem List<T> direkt erstellen, indem Sie list.AsReadOnly() aufrufen.

+0

Vielen Dank, das ist, was ich gesucht habe. – Baltasarq