2012-11-06 22 views
6

Tôi có một lớp đơn giản:Sử dụng chuỗi indexer trên lớp tùy chỉnh

public class MyClass 
{ 
    public string MyClassName { get; private set; } 
    public string MyClassValue { get; private set; } 
} 

Và tôi muốn tổ chức một loạt các MyClass đối tượng như thế này:

MyClass[] myClasses = new MyClass[5]; 

Có thể, mà không cần tạo một " bộ sưu tập "đối tượng, để có thể truy cập vào một trong những đối tượng trong mảng các đối tượng của chuỗi chỉ mục (là thuật ngữ đúng)?

Ví dụ, nếu MyClasses [2] có giá trị "andegre" trong bất động sản MyClassName, làm thế nào/tôi có thể truy cập vào nó như thế này:

MyClass andegre = myClasses["andegre"]; 

Thay vì làm một cái gì đó như:

MyClass andegre = myClasses[GetIndexOfOfMyClassName("andegre")]; 

TIA

+1

Bạn thực sự nên tạo khác lớp 'MyClassCollection' với [indexer] (http://msdn.microsoft.com/en-us/library/2549tw02.aspx). –

+0

xem xét sử dụng từ điển? – Hardrada

Trả lời

1

Chào mừng bạn đến với thế giới LINQ!

MyClass andegre = 
    myClasses.FirstOrDefault(item => item.MyClassValue.Equals("andegre")); 
+0

Ah, tôi đã không sử dụng LINQ cả, có lẽ là lúc tôi làm .... cảm ơn! – ganders

3

Đối với một indexer tùy chỉnh để làm việc trên một bộ sưu tập hiện có, bộ sưu tập mà sẽ cần phải là một bộ sưu tập tùy chỉnh với indexer thực hiện bởi bạn, có thể là bất cứ điều gì đối số bạn muốn mang theo bất cứ điều gì logic bạn muốn đằng sau nó . Một chỉ mục tùy chỉnh lấy một chuỗi là hoàn toàn có thể trên một loại tùy chỉnh.

Không có cách nào để ghi đè lên chỉ mục nào được sử dụng khi bạn đang sử dụng MyClass[] (như trong, một mảng .NET gốc), tất cả những gì bạn nhận được là chỉ mục thứ tự.

Ngoài ra, để truy vấn dữ liệu bạn muốn, bạn có thể sử dụng LINQ to Objects (được gọi là LINQ) vì các câu trả lời khác đã đề xuất.

3

MyClass[] myClasses là một mảng (thực tế, vectơ). Mảng/vectơ không có bất kỳ trình chỉ mục chuỗi nào - chỉ truy cập vị trí.

Để có được những gì bạn muốn, bạn sẽ cần một cái gì đó giống như một cuốn từ điển, ví dụ:

var myClasses = new Dictionary<string,MyClass>(); 
myClasses.Add("Fred", new MyClass {...}); 
myClasses.Add("Betty", new MyClass {...}); 
myClasses.Add("Wilma", new MyClass {...}); 
// etc 

thì:

MyClass obj = myClasses["Fred"]; 

hay:

MyClass obj; 
if(myClasses.TryGetValue("Fred", out obj)) { 
    // found Fred - use obj 
} else { 
    // no Fred here - don't look at obj 
} 
Các vấn đề liên quan