2010-09-30 37 views
15

Đọc về vấn đề của việc tạo ra một vector đọc chỉ nguyên thủy trong C# (về cơ bản, bạn không thể làm điều đó),Tại sao không có lớp ReadOnlyList <T> trong thư viện System.Collections của C#?

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

tôi đã học về ReadOnlyListBase. Đây là một lớp cơ sở cho các thùng chứa các đối tượng cho phép các vị trí của chúng được truy cập nhưng không được sửa đổi. Thậm chí có một ví dụ trong Microsoft msdn.

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

tôi chút thay đổi ví dụ trong MSDN sử dụng bất kỳ loại:

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)); 
    } 

} 

... và nó hoạt động. Câu hỏi của tôi là, tại sao không tồn tại lớp này trong thư viện chuẩn của C#, có lẽ trong System.Collections.Generic? Tôi có thiếu nó không? Nó đâu rồi? Cảm ơn bạn.

+1

Cập nhật năm 2015: .NET 4.5 hiện có ImmutableList https://msdn.microsoft.com/en-us/library/dn467185(v=vs.111).aspx –

Trả lời

18

ReadOnlyCollection<T>, là phiên bản chung của phần trên.

Bạn có thể tạo một tài khoản từ số List<T> trực tiếp bằng cách gọi list.AsReadOnly().

+0

Cảm ơn bạn, đó là những gì tôi đang tìm kiếm. – Baltasarq

Các vấn đề liên quan