我想使用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
}
}
谁能告诉我这里我做错了什么?我在哪里指定键值以便我可以通过它检索?
答案 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.
}
}