void Main()
{
var deck = Enumerable.Range(0,52);
GetAllHands(deck,5).Count().Dump("All 5 card hands");
}
IEnumerable> GetAllHands(IEnumerable deck, int handSize)
{
var count = 0;
foreach(var card in deck)
{
if(handSize == 1) yield return new[]{card};
else foreach(var hand in GetAllHands(deck.Skip(++count), handSize-1))
yield return new[]{card}.Concat(hand);
}
}