2011-07-24 144 views
0

我有一個Collection對象(基於System.Collections.CollectionBase),但要訪問該集合中的對象的值,我必須使用當前的索引。是否有可能根據集合中對象的名稱獲取值?我可以通過名稱引用集合中的對象嗎?

例如,而不是...

MyCollection[0].Value 

......我該怎麼辦沿着線的東西:

MyCollection["Birthday"].Value 

回答

1

您可以使用此[]存取器

public Item this[string name] 
{ 
get 
{ 
    // iterate through the elements of the collection 
    //and return the one that matches with name 
} 
} 

在您的MyCollectionClass上擁有此getter屬性

2

你可以使用一個Dictionary<TKey, TValue>它允許您訪問其元素由一個鍵。所以如果你的例子中的鍵是一個字符串,你可以使用Dictionary<string, TValue>

4

爲了做到這一點,你需要有一個Dictionary<string,object>。不幸的是收藏只允許索引隨機訪問。

你可以做這樣的事情:

var item = MyCollection 
       .Where(x => x.SomeProp == "Birthday") 
       .FirstOrDefault(); 

// careful - item could be null here 
var value = item.Value; 

但是,這將是遠不一樣有效,因爲通過索引隨機訪問。

2

爲什麼你認爲集合中的對象有名字?他們不。你可以做的是使用Dictionary<String, SomethingElse>來啓用你的語法。

+0

對不起,我沒有說清楚'Name'是作爲Collection中對象的屬性之一保存的。 – triplestones

2

正如其他人所說,你需要一個Dictionary<>來做到這一點。如果你不能改變它提供收集的代碼,你可以使用LINQ的ToDictionary()方法將其轉換爲一個字典自己:

var dict = MyCollection.ToDictionary(obj => obj.Name); 

從那裏,你可以這樣做:

var value = dict["Birthday"].Value; 
0

一個解決辦法可能是

private const int BIRTHDAY = 0; 

var value = MyCollection["Birthday"].Value; 
相關問題