0
У меня есть собственный класс Deck
, который наследует список с пользовательским классом Card
.Преобразование унаследованного класса в настраиваемый
Код для Deck
:
public class Deck : List<Card>
{
public void DrawCard(Deck d)
{
d.Add(this[0]);
this.RemoveAt(0);
}
public Deck(bool deckHasCards)
{
if (deckHasCards)
{
for (int i = 1; i <= 13; i++)
{
this.Add(new Card(i, Card.Suit.CLUBS));
this.Add(new Card(i, Card.Suit.DIAMONDS));
this.Add(new Card(i, Card.Suit.HEARTS));
this.Add(new Card(i, Card.Suit.SPADES));
}
}
}
public void Shuffle()
{
Random rng = new Random();
int n = this.Count;
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
Card value = this[k];
this[k] = this[n];
this[n] = value;
}
}
}
и Card
:
public class Card
{
public Suit s { get; set; }
public int num { get; set; }
public enum Suit
{
HEARTS,
DIAMONDS,
CLUBS,
SPADES
}
public Card(int number, Suit suit)
{
num = number;
s = suit;
}
public override String ToString()
{
return num + " of " + s.ToString().ToLower();
}
}
Все прекрасно работает, но если я хочу, чтобы выполнять какие-либо операции LINQ на Deck
объекта, у меня нет никакого способа преобразования он возвращается к Deck
. Есть ли (правильный) способ сделать это?
Поскольку Linq является создание коллекций/новым вариантом перечислимых на лету, это имеет смысл. Сами запросы - это ссылки _not_ объекта на ваш оригинальный объект 'Deck'. Возможно, вы можете опубликовать пример кода/использования того, что вы делаете, или того, что вы хотели бы сделать. –
@ChrisSinclair Я понимаю, что мой оригинальный объект не изменяется, я просто хотел бы, чтобы был способ преобразования объекта post-LINQ обратно в палубу. IE: 'deck = deck.Where (card => card.num == 2) .toDeck();' – Wilson
Вы хотите, чтобы вы создавали _new_ колоду из некоторого набора карт (то есть новую 'Deck «что состоит из« 2 »-картов из вашей оригинальной« колоды »?) РЕДАКТИРОВАТЬ: Если да, то в порядке, если один и тот же объект« Карточка »может существовать одновременно в нескольких колодах? –