En elegant lösning på ett komplext problem

I ett av mina sidoprojekt som inkluderar beta-testning av XNA Game Studio 3.0 så behövde jag blanda en kortlek slumpmässigt. Ett inte helt trivialt problem som jag satt och skissade på ett tag och försökte hitta på en klurig lösning när jag plötsligt öppnade Juli-utgåvan av MSDN Magazine och hittade den här lösningen på samma problem fast gällande heltal:

Random rnd = new Random();
var integers = Enumerable.Range(1, 10).OrderBy( o => rnd.Next());

Tack vare att XNA Game Studio 3.0 har stöd för Visual Studio 2008 och även .NET Framework 3.5 så blev min lösning helt enkelt:

public static IList<Card> ShuffleDeck(List<Card> listOfCards)
{
    Random random = new Random();

    var shuffledDeck = from card in listOfCards
                       orderby random.Next()
                       select card;

    return shuffledDeck.ToList();
}

Funktionen tar en initierad lista av kort (som skapats med en uppsättning for-loopar) och returnerar en ny lista som är helt blandad.

Tack LINQ!