我有一個Collection對象(基於System.Collections.CollectionBase),但要訪問該集合中的對象的值,我必須使用當前的索引。是否有可能根據集合中對象的名稱獲取值?我可以通過名稱引用集合中的對象嗎?
例如,而不是...
MyCollection[0].Value
......我該怎麼辦沿着線的東西:
MyCollection["Birthday"].Value
我有一個Collection對象(基於System.Collections.CollectionBase),但要訪問該集合中的對象的值,我必須使用當前的索引。是否有可能根據集合中對象的名稱獲取值?我可以通過名稱引用集合中的對象嗎?
例如,而不是...
MyCollection[0].Value
......我該怎麼辦沿着線的東西:
MyCollection["Birthday"].Value
您可以使用此[]存取器
public Item this[string name]
{
get
{
// iterate through the elements of the collection
//and return the one that matches with name
}
}
在您的MyCollectionClass上擁有此getter屬性
你可以使用一個Dictionary<TKey, TValue>
它允許您訪問其元素由一個鍵。所以如果你的例子中的鍵是一個字符串,你可以使用Dictionary<string, TValue>
。
爲了做到這一點,你需要有一個Dictionary<string,object>
。不幸的是收藏只允許索引隨機訪問。
你可以做這樣的事情:
var item = MyCollection
.Where(x => x.SomeProp == "Birthday")
.FirstOrDefault();
// careful - item could be null here
var value = item.Value;
但是,這將是遠不一樣有效,因爲通過索引隨機訪問。
爲什麼你認爲集合中的對象有名字?他們不。你可以做的是使用Dictionary<String, SomethingElse>
來啓用你的語法。
正如其他人所說,你需要一個Dictionary<>來做到這一點。如果你不能改變它提供收集的代碼,你可以使用LINQ的ToDictionary()方法將其轉換爲一個字典自己:
var dict = MyCollection.ToDictionary(obj => obj.Name);
從那裏,你可以這樣做:
var value = dict["Birthday"].Value;
一個解決辦法可能是
private const int BIRTHDAY = 0;
var value = MyCollection["Birthday"].Value;
對不起,我沒有說清楚'Name'是作爲Collection中對象的屬性之一保存的。 – triplestones