簡體   English   中英

將C#中的兩個列表對象連接在一起

[英]Join together two list objects in C#

基本上,我正在編寫撲克應用程序,並且有一個名為Deck的類,它實際上只是一個List<>包含Card類。 它實際上只是一張卡片清單。

我現在正在嘗試將其中兩個Decks連接在一起: playerCardstableCards 但是,當我編寫此代碼時,出現錯誤消息:

playerCards.Concat(tableCards);

它告訴我,“'Deck'不包含'Concat'的定義,找不到可以接受類型為'Deck'的第一個參數的擴展方法'Concat'。”

如何將這兩個列表對象串聯在一起?

希望這可以更好地解釋Deck ...

public class Deck
{

    public Deck()
    {
        deck = new List<Card>();
    }

    public List<Card> deck { get; }

Concat方法是在Enumerable定義的擴展方法:

IEnumerable<TSource> Concat<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second);

這意味着您可以像這樣使用它:

IEnumerable<Card> deck1 = new List<Card>();
IEnumerable<Card> deck2 = new List<Card>();
IEnumerable<Card> deck3 = deck1.Concat(deck2);

它將返回一個新的Card對象序列。

為fx List<T>定義了方法AddRange

public void AddRange(IEnumerable<T> collection)

像這樣使用它:

List<Card> deck1 = new List<Card>();
List<Card> deck2 = new List<Card>();
deck2.AddRange(deck1);

這將通過添加deck2中的元素來修改列表deck1。

因此,如何在類Deck實現ConcatAddRange的選擇取決於您希望它具有的行為:

  • 從兩個Deck返回一個包含卡片的新Deck
  • 修改Deck從其他添加卡Deck

也許您可以使用以下作為啟發:

public class Deck
{
    private List<Card> cards;

    public IReadOnlyList<Card> Cards
    {
        get
        {
            return cards.AsReadOnly();
        }
    }

    public Deck()
    {
        cards = new List<Card>();
    }

    public Deck(IEnumerable<Card> cards)
    {
        cards = cards.ToList();
    }

    public Deck Concat(Deck other)
    {
        return new Deck(Cards.Concat(other.Cards));
    }

    public void AddRange(Deck other)
    {
        cards.AddRange(other.Cards);
    }
}
public void Concat(Deck other)
{
   this.deck.AddRange(other.deck);
}

像這樣。 List.AddRange

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM