2013-02-19 40 views
5

Tôi hiện đang tạo lớp danh sách chung chung cơ bản của riêng mình (để hiểu rõ hơn về cách những người được xác định trước hoạt động). Chỉ có vấn đề tôi có là tôi không thể tiếp cận các phần tử bên trong mảng như bạn thường làm trong việc sử dụng "System.Collections.Generic.List".lớp danh sách chung trong C#

GenericList<type> list = new GenericList<type>(); 
list.Add(whatever); 

này hoạt động tốt, nhưng khi cố gắng truy cập vào "bất cứ điều gì" Tôi muốn để có thể viết :

list[0]; 

Nhưng điều đó rõ ràng là không làm việc kể từ khi tôi đang thiếu một cái gì đó rõ ràng trong mã, tôi cần phải thêm gì vào lớp chung chung hoàn toàn làm việc của mình?

+0

gì 'GenericList' lớp học của bạn nhìn? – LukeHennerley

+0

Ngẫu nhiên, một tính năng có thể hữu ích trong danh sách chung là một phương thức như 'public void ActOnElement (int index, ActByRef proc, ref TP1 param1) {proc (ref Array [index], ref TP param1); } 'sẽ cho phép mã hoạt động trực tiếp trên một mục danh sách [giả sử' đại biểu công cộng void ActByRef (ref T1 p1, ref T2 p2); ']. Nếu có, ví dụ: một 'GenericList ', một phương thức như vậy có thể cho phép mã để nói 'myList.ActOnItem (chỉ mục, (ref Rectangle r, ref int v) => {rX - = v; r.Width + = v;}, ref widthAdjust)' để cập nhật một mục danh sách "tại chỗ". – supercat

Trả lời

12

Nó được gọi là một indexer, được viết như sau:

public T this[int i] 
{ 
    get 
    { 
     return array[i]; 
    } 
    set 
    { 
     array[i] = value; 
    } 
} 
+0

Tôi nghi ngờ rằng OP có thể có nghĩa là anh ta nhận được 'Chỉ có phép gán, gọi, tăng, giảm và biểu thức đối tượng mới có thể được sử dụng như một câu lệnh' khi truy cập vào cá thể của' GenericList'? Rõ ràng nếu anh ta thậm chí không thể truy cập vào chỉ mục thì câu trả lời của bạn là tốt :) – LukeHennerley

+0

@LukeHennerley Tôi tin rằng OP đang tìm kiếm khai báo thuộc tính để đặt trong kiểu 'GenericList' của họ sao cho: cho một thể hiện của' GenericList list', họ có thể truy cập một phần tử bên trong nó bằng cách sử dụng một bộ chỉ mục ví dụ 'list [0]'. –

+0

Tôi nghi ngờ nhiều, chỉ nghĩ đến cách OP có thể được hiểu sai. Dù sao, +1 :) – LukeHennerley

1

Tôi nghĩ rằng tất cả các bạn cần làm là thực hiện IList<T>, để có được tất cả các chức năng cơ bản

public interface IList<T> 
    { 

    int IndexOf(T item); 

    void Insert(int index, T item); 

    void RemoveAt(int index); 

    T this[int index] { get; set; } 
    } 
Các vấn đề liên quan