我可以通过集合中的对象名称来引用它吗?
本文关键字:引用 集合 可以通过 对象 | 更新日期: 2023-09-27 18:03:10
我有一个Collection对象(基于System.Collections.CollectionBase),但是要访问该集合中对象的值,我目前必须使用索引。是否有可能根据集合中对象的名称获取值?
例如,代替…
MyCollection[0].Value
…我该怎么做呢?
MyCollection["Birthday"].Value
为了做到这一点,你需要有一个Dictionary<string,object>
。不幸的是,集合只允许按索引随机访问。
你可以这样做:
var item = MyCollection
.Where(x => x.SomeProp == "Birthday")
.FirstOrDefault();
// careful - item could be null here
var value = item.Value;
您可以使用允许您通过键访问其元素的Dictionary<TKey, TValue>
。所以,如果你的例子中的键是一个字符串,你可以使用Dictionary<string, TValue>
.
你认为集合中的对象为什么有名称?他们没有。您可以做的是使用Dictionary<String, SomethingElse>
来启用您的语法。
正如其他人所说,要做到这一点,您需要Dictionary<>。如果不能更改提供集合的代码,可以使用LINQ的ToDictionary()方法自己将其转换为字典:
var dict = MyCollection.ToDictionary(obj => obj.Name);
从这里开始,你可以做:
var value = dict["Birthday"].Value;
您可以使用this[]访问器
public Item this[string name]
{
get
{
// iterate through the elements of the collection
//and return the one that matches with name
}
}
在MyCollectionClass中设置这个getter属性
一个变通办法是
private const int BIRTHDAY = 0;
var value = MyCollection["Birthday"].Value;