using System.Collections.Generic;
public static void Main()
var hand = new List<Card>();
Console.WriteLine($"Hand : {string.Join(", ", hand)}");
Console.WriteLine($"Deck : {string.Join(", ", deck)}");
public static List<Card> GetDeck()
var deck = new List<Card>();
foreach(var suit in Card.Suit.GetValues<Card.Suit>())
for(var rank = 1; rank < 14; rank++)
var card = new Card(rank, suit);
public static Card GetCard(List<Card> deck)
throw new Exception("Deck is empty!");
public record Card(int Rank, Card.Suit CardSuit = Card.Suit.Club)
public int Value => Math.Min(10, Rank);
public override string ToString() => $"{RankToString(Rank)}{SuitToString(CardSuit)}";
private static string RankToString(int rank)
_ when rank >= 2 && rank <= 10 => rank.ToString(),
_ => throw new ArgumentOutOfRangeException(nameof(rank), "Rank must be between 1 and 13")
private static string SuitToString(Suit suit)
_ => throw new ArgumentOutOfRangeException(nameof(suit), "Suit must be Club, Diamond, Heart, or Spades")