0

さまざまなコレクションとデータ型を実装できるインターフェイスがあります。一部のコレクションでは正常に動作しますが、ディクショナリが問題を引き起こしています。ディクショナリは少し異なり、キーと値のペアがあるためだと思います。

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;
    }
}
4

3 に答える 3

4

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;
  }
}
于 2012-10-12T18:50:36.063 に答える
2

Aはnot をDictionary<TKey,TValue>実装しています。キーを使用していないように見えるので、代わりに a を使用してみませんか? 実装します。ICollection<KeyValuePair<TKey,TValue>>ICollection<TValue>HashSet<T>HashSet<T>ICollection<T>


アップデート

あなたのコード行

dictionary.Add(dictionary.Count + 1, item);

必要なのは順序付きリストだけだと思います。キーに従ってリストをソートするソート済みリストとは対照的に、順序付きリストは元の挿入順序を保持します。したがって、おそらくList<T>.

于 2012-10-12T18:55:30.523 に答える
0

はい、ただし Dictionary には、それ自体を List に変換するメソッドがあり、ICollection を実装しています。

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

これは のコレクションを返しKeyValuePairます。

于 2012-10-12T18:47:11.063 に答える