如何创建包含特定类型的通用集合?

时间:2014-02-24 20:59:23

标签: c# generics

在C#中,我想创建一个通用的牌组。启用我,例如创建一堆卡片,一张卡片或任何其他卡片集合?假设此集合是从IEnumerable派生的。

public class Deck<T> where T : IEnumerable
{
    private T<ICard> __Cards;

    public Deck() : this(52){}

    public Deck(int cards)
    {
        __Cards = new T<Card>(cards);
    }
}

其他一些课......打电话

Deck<List> _Deck = new Deck<List>();

我收到以下错误:

The type parameter 'T' cannot be used with type arguments

1 个答案:

答案 0 :(得分:3)

我认为这是一个可以通过继承更好地解决的案例

public abstract class Deck 
{
  public abstract ICard this[int index]
  {
    get;
    set;
  }

  protected void Create(int cardCount);
}

public sealed class DeckList : Deck
{
  private List<ICard> m_list;
  public override ICard this[int index] 
  {
    get { return m_list[index]; }
    set { m_list[index] = value; }
  }
  protected override void Create(int cards) 
  {
    m_list = new List<ICard>(cards);
  }
}

如果你沿着通用路径继续下去,我想你最终会发现你需要一个带有2个通用参数的类型

  • 收集类型
  • 元素类型

实施例

public class Deck<TElement, TCollection> 
  where TCollection : IEnumerable<TElement>