基本上,我正在编写一个扑克应用程序,我有一个名为Deck
的类,它实际上只是List<>
包含类Card
的对象。它实际上只是一张卡片列表。
我现在正试图将其中两个Decks
连接在一起:playerCards
和tableCards
。但是,当我编写此代码时,我收到一条错误消息:
playerCards.Concat(tableCards);
它告诉我“'Deck'不包含'Concat'的定义,也没有扩展方法'Concat'接受第一个'Deck'类型的参数。”
如何将这两个列表对象连接在一起?
希望这能更好地解释甲板......
public class Deck
{
public Deck()
{
deck = new List<Card>();
}
public List<Card> deck { get; }
答案 0 :(得分:3)
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-objects序列。
方法AddRange
是为fx List<T>
:
public void AddRange(IEnumerable<T> collection)
像这样使用:
List<Card> deck1 = new List<Card>();
List<Card> deck2 = new List<Card>();
deck2.AddRange(deck1);
这将通过添加来自deck2的元素来修改列表deck1。
因此,您选择如何在班级Concat
中实施AddRange
或Deck
取决于您希望它拥有的行为:
Deck
s 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);
}
}
答案 1 :(得分:1)
public void Concat(Deck other)
{
this.deck.AddRange(other.deck);
}
喜欢这个。 List.AddRange