以 ICollection 形式返回字典

1 c# generics collections dictionary icollection

我有一个可以实现各种集合和数据类型的接口,它可以很好地处理某些集合,但字典给我带来了问题,我猜是因为字典有点不同并且有键值对?

public interface IStructure
{
    void InsertRun<T> (T item);
    ICollection RetrieveSortedListRun<T>();
    T RetrieveItemRun<T>(T item);
}

class DictionaryRun : IStructure
{
    IDictionary<int, object> dictionary;

    public DictionaryRun()
    {
        dictionary = new Dictionary<int, object>();
    }

    public void InsertRun<T>(T item)
    {
        dictionary.Add(dictionary.Count + 1, item);
    }

    public ICollection RetrieveSortedListRun<T>()
    {
        return dictionary;
    }

    public T RetrieveItemRun<T>(T item)
    {
        return item;
    }
}
Run Code Online (Sandbox Code Playgroud)

JG *_* SD 5

IDictionary<TKey, TValue>不执行ICollection,就执行ICollection<KeyValuePair<TKey, TValue>>

现在,如果您将字典更改为IDictionary您的代码将编译。

然而,在我看来,你的界面和对象的整体设计可以重新设计。

public interface IStructure<T>
{
  void InsertRun(T item);
  ICollection<T> RetrieveSortedListRun();
  T RetrieveItemRun(T item);
}


class DictionaryRun<T> : IStructure<T>
{
  IDictionary<int, T> dictionary;

  public DictionaryRun()
  {
    dictionary = new Dictionary<int, T>();
  }

  public void InsertRun(T item)
  {
    dictionary.Add(dictionary.Count + 1, item);
  }

  public ICollection<T> RetrieveSortedListRun()
  {
    return dictionary.Values;
  }

  public T RetrieveItemRun(T item)
  {
    return item;
  }
}
Run Code Online (Sandbox Code Playgroud)