2012-11-06 76 views
6

我有一個簡單的類:使用字符串索引

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

我想抱着MyClass的對象的數組是這樣的:

MyClass[] myClasses = new MyClass[5]; 

是否有可能,而無需創建一個「集合「對象,以便能夠通過字符串索引器訪問對象數組中的對象之一(是正確的術語)?

例如,如果myClasses [2]已在MyClassName屬性值 「andegre」,如何/我可以訪問它是這樣的:

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

MyClass andegre = myClasses["andegre"]; 

做這樣的事情而不是

TIA

+1

你真的應該創建另一個類[MyClassCollection]與[indexer](http://msdn.microsoft.com/zh-cn/library/2549tw02.aspx)。 –

+0

考慮使用字典? – Hardrada

回答

1

歡迎來到LINQ的世界!

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

啊,我還沒有使用LINQ,可能是我的時間....謝謝! – ganders

3

對於自定義索引在現有的收集工作,該集合將需要自定義集合與您實現indexer,它可以成爲你想帶着你想它背後的任何邏輯的任何參數。採用字符串的自定義索引器完全可以用於自定義類型。

當您使用MyClass[](如在本機.NET數組中)時,無法覆蓋使用哪個索引器,您只能獲得序數索引器。

另外,爲了查詢你想要的數據,你可以使用LINQ to Objects(簡稱LINQ)作爲其他答案的建議。

3

MyClass[] myClasses是一個數組(實際上,一個矢量)。數組/矢量沒有任何字符串索引器 - 只是位置訪問。

爲了得到你想要的,你需要像一本字典,例如什麼:

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

則:

MyClass obj = myClasses["Fred"]; 

或:

MyClass obj; 
if(myClasses.TryGetValue("Fred", out obj)) { 
    // found Fred - use obj 
} else { 
    // no Fred here - don't look at obj 
}