添加和检索KeyedCollection

时间:2010-06-30 07:59:18

标签: c# collections keyedcollection

我想使用KeyedCollection来存储针对字符串键值的类。我有以下代码:

public class MyClass
{
    public string Key;
    public string Test;
}

public class MyCollection : KeyedCollection<string, MyClass>
{
    public MyCollection() : base()
    {
    }

    protected override String GetKeyForItem(MyClass cls)
    {
        return cls.Key;
    }
}

class Program
{
    static void Main(string[] args)
    {
        MyCollection col = new MyCollection();
        col.Add(new MyClass()); // Here is want to specify the string Key Value
    }
}

谁能告诉我这里我做错了什么?我在哪里指定键值以便我可以通过它检索?

3 个答案:

答案 0 :(得分:8)

您的GetKeyForItem覆盖是指定项目的键的内容。来自文档:

  

与字典不同,KeyedCollection的元素不是键/值对;相反,整个元素是值,键嵌入在值中。例如,从KeyedCollection<String,String>派生的集合的元素可能是“John Doe Jr.”。其价值是“John Doe Jr.”关键是“Doe”;或者可以从KeyedCollection<int,Employee>. The abstract GetKeyForItem`方法派生包含整数键的员工记录集合,从元素中提取密钥。

因此,为了正确键入项目,您应该在将其添加到集合之前设置其Key属性

MyCollection col = new MyCollection();
MyClass myClass = new MyClass();
myClass.Key = "This is the key for this object";
col.Add(myClass); 

答案 1 :(得分:1)

KeyedCollection是用于创建键控集合的基类,因此您需要自己实现很多。

使用Dictionary可能更容易,更快捷。

答案 2 :(得分:0)

我知道它略有不同,但您是否考虑过实施indexer

public string this[string index]
{
    get { 
      // put get code here
    }
    set {
      // put set code here.
    }
}