繁体   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