[英]Join together two list objects in C#
基本上,我正在编写扑克应用程序,并且有一个名为Deck
的类,它实际上只是一个List<>
包含Card
类。 它实际上只是一张卡片清单。
我现在正在尝试将其中两个Decks
连接在一起: playerCards
和tableCards
。 但是,当我编写此代码时,出现错误消息:
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
实现Concat
或AddRange
的选择取决于您希望它具有的行为:
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.