Зачем создавать новую универсальную коллекцию вместо использования List <T>? - PullRequest
1 голос
/ 15 июня 2011

Я хочу создать карточную игру. Мне нужно создать коллекцию, чтобы держать карты. Я могу использовать тип List<T> или создать собственный тип коллекции.

По каким причинам я должен выбрать решение для создания собственного типа коллекции?

Обновление:

1) Спасибо всем за быстрые ответы.

2) На самом деле мне нужно, чтобы мой список карт был очень динамичным. Мне нужно все время добавлять и удалять карты.

Если я хочу добавить специализированные методы в коллекцию почему бы не создать мою собственную коллекцию, которая наследуется от List?

3) «Тип общего списка позволит вам пропустить приведение объектов обратно к Карточкам, например ...»

Если я собираюсь использовать List<T>, это также универсальный тип, поэтому мне не придется использовать приведение.

Ответы [ 3 ]

2 голосов
/ 15 июня 2011

Ну, во-первых, ваша колода не должна позволять вам добавлять, удалять или редактировать карты.Технически это должен быть массив только для чтения, а не List<>.

Кроме того, для этого могут потребоваться специальные методы, например, тасование, маркировка карт (раздача их игрокам, маркировка их как сыгранных и т. Д.) И так далее.

Все зависит от того, сколько усилий вы хотите приложить к этому:)

1 голос
/ 15 июня 2011

Если List предлагает пользователям вашего API делать слишком много, то вы можете создать свой собственный тип.Например, если вы хотите, чтобы ваши пользователи могли перетасовать карты, но вы не хотите, чтобы они удаляли карты.Список предложений Remove, индексатор list[13] = new Card, Clear (), которые изменяют список.Кроме того, если вы хотите, чтобы определенные события запускались, вы можете создать свои собственные.

0 голосов
/ 15 июня 2011

Общий тип списка позволит вам пропустить приведение объектов обратно к Карточкам, например ...

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));

В основном все зависит от того, что вы хотите.Поскольку вы знаете, что собираетесь хранить карты, вы можете также использовать общую коллекцию.

...