我可以通过集合中的对象名称来引用它吗?

本文关键字:引用 集合 可以通过 对象 | 更新日期: 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;