3

我想使用 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
    }
}

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

4

3 回答 3

8

您的GetKeyForItem覆盖是指定项目的键。从文档:

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

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

MyCollection col = new MyCollection();
MyClass myClass = new MyClass();
myClass.Key = "This is the key for this object";
col.Add(myClass); 
于 2010-06-30T08:08:18.987 回答
1

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

也许使用 aDictionary会更容易和更快。

于 2010-06-30T08:07:18.803 回答
0

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

public string this[string index]
{
    get { 
      // put get code here
    }
    set {
      // put set code here.
    }
}
于 2010-06-30T08:33:10.023 回答