1

我有一个通用字典

class GenericDictionary<TKey, TValue> : Dictionary<TKey, TValue>
{
    Dictionary<TKey, TValue> dictionary = new Dictionary<TKey,TValue>();

    public void AddToGenericDictionary(TKey key, TValue value)
    {
        dictionary.Add(key, value);
    }
}

我已经宣布了一个班级

class GenericInput1
 {
     public string Name { get; set; }
 }

在主函数中,我已经初始化了 GenericInput1 类并添加到 GenericDIctionary

class Program
{
    static void Main(string[] args)
    {
         GenericInput1 inp1 = new GenericInput1 { Name = "An" };
         GenericInput1 inp2 = new GenericInput1 { Name = "B" };
         GenericInput1 inp3 = new GenericInput1 { Name = "C" };

         GenericDictionary<int, GenericInput1> genericIntKey = new GenericDictionary<int, GenericInput1>();

         genericIntKey.AddToGenericDictionary(1, inp1);
         genericIntKey.AddToGenericDictionary(2, inp2);
         genericIntKey.AddToGenericDictionary(3, inp3);

         GenericInput1 result2 = genericIntKey[3];
         Console.WriteLine(result2.Name);
    }
}

当我运行程序时,它给了我以下异常:

未处理的异常:System.Collections.Generic.KeyNotFoundException:字典中不存在给定的键。

但是如果我尝试使用内置的 Add 方法添加到通用字典,程序运行良好。

4

2 回答 2

2

您继承自Dictionary,因此您的类中不需要支持字段Dictionary。所以删除它并使用父字典:

class GenericDictionary<TKey, TValue> : Dictionary<TKey, TValue>
{
    Dictionary<TKey, TValue> dictionary = new Dictionary<TKey,TValue>();

    public void AddToGenericDictionary(TKey key, TValue value)
    {
        dictionary.Add(key, value);
    }
}

class GenericDictionary<TKey, TValue> : Dictionary<TKey, TValue>
{
    public void AddToGenericDictionary(TKey key, TValue value)
    {
        this.Add(key, value);
    }
}
于 2013-08-11T09:51:26.210 回答
0

尝试将您的代码更改为

class GenericDictionary<TKey, TValue> : Dictionary<TKey, TValue>
{

    public void AddToGenericDictionary(TKey key, TValue value)
    {
        this.Add(key, value);
    }
}

覆盖字典时,您不需要实现后备存储。

但是,如果您想实现自己的字典,请查看IDictionary Interface

表示键/值对的通用集合。

于 2013-08-11T09:50:58.363 回答