为什么要创建新的泛型集合而不是使用List <t>?</t>

时间:2011-06-15 16:57:05

标签: c#-2.0

我想制作纸牌游戏。 我需要创建一个集合来持卡。 我可以使用List<T>类型或创建我自己的通用集合类型。

我应该选择创建自己的集合类型的解决方案?

更新

1)感谢大家的快速回答。

2)其实我需要我的名单很有活力。 我需要一直添加和删除卡片。

如果我想为集合添加专门的方法 为什么不创建我自己的从List继承的集合?

3)“通用列表类型将允许您跳过将对象转换回卡片的例子......”

如果我要使用List<T>,它也是一个通用类型,所以我不必使用强制转换。

3 个答案:

答案 0 :(得分:2)

好吧,有一件事你的套牌不允许你添加,删除或编辑卡片。它在技术上应该是只读数组,而不是List<>

除此之外,它可能需要专门的方法来说,改组,标记牌(将它们交给玩家,将它们标记为等等),等等。

这完全取决于你想要投入多少努力:)

答案 1 :(得分:1)

如果List为您的api用户提供了太多功能,那么您可能需要创建自己的类型。例如,如果您希望用户能够随机播放卡片,但您不希望他们移除卡片。列出要约Remove,索引器list[13] = new CardClear (),它会改变列表。此外,如果您想要触发特定事件,您可能想要创建自己的事件。

答案 2 :(得分:0)

通用列表类型允许您跳过将对象转换回卡片,例如......

public class Card
{
   public Suits Suit { get; set; }
   public string Value { get; set; }

   public Card(Suits suit, string value)
   {
      this.Suit = suit;
      this.Value = value;
   }
}

public enum Suits { Heart, Spade, Club, Diamond }

// Generic List
List<Card> cards = new List<Card>();
cards.Add(new Card(Suits.Heart, "Queen"));
cards.Add(new Card(Suits.Club, "Ace"));
cards.Add(new Card(Suits.Diamond, "5"));

// List of Objects
ArrayList list = new ArrayList();
list.Add(new Card(Suits.Heart, "Queen"));
list.Add(new Card(Suits.Club, "Ace"));
list.Add(new Card(Suits.Diamond, "5"));

Console.WriteLine(String.Format("{0} {1}", cards[0].Suit, cards[0].Value));
Console.WriteLine(String.Format("{0} {1}", (list[0] as Card).Suit, (list[0] as Card).Value));

基本上一切都取决于你想要什么。既然你知道你将要存储卡片,你也可以使用通用的收藏品。