2

我对 C# 还很陌生,所以如果这是一个愚蠢的问题,请原谅我。我遇到了一个错误,但我不知道如何解决它。我正在使用 Visual Studio 2010。

此代码行

public class GClass1 : KeyedCollection<string, GClass2>

给我错误

'GClass1' does not implement inherited abstract member 'System.Collections.ObjectModel.KeyedCollection<string,GClass2>.GetKeyForItem(GClass2)'

根据我的阅读,这可以通过在继承类中实现抽象成员来解决,如下所示

public class GClass1 : KeyedCollection<string, GClass2>
{
  public override TKey GetKeyForItem(TItem item);
  protected override void InsertItem(int index, TItem item)
  {
    TKey keyForItem = this.GetKeyForItem(item);
    if (keyForItem != null)
    {
        this.AddKey(keyForItem, item);
    }
    base.InsertItem(index, item);
}

然而,这给了我错误,说“找不到类型或命名空间名称 TKey/TItem 找不到。”

帮助!

4

1 回答 1

4

TKey是的TItem类型参数KeyedCollection<TKey, TItem>

由于您分别继承KeyedCollection<string, GClass2>了具体类型stringGClass2,因此您应该用这两种类型替换占位符类型TKeyTItem在您的实现中:

public class GClass1 : KeyedCollection<string, GClass2>
{
  public override string GetKeyForItem(GClass2 item);
  protected override void InsertItem(int index, GClass2 item)
  {
    string keyForItem = this.GetKeyForItem(item);
    if (keyForItem != null)
    {
        this.AddKey(keyForItem, item);
    }
    base.InsertItem(index, item);
}
于 2012-11-20T17:06:59.717 回答