As for the immediate problem, changing the initial start position, after all the cards have been added, to a random position should remove the bias:
public void SetStart()
{
int limit = GetNextRandom(_count)
for (int i = 0; i < GetNextRandom(_count);limit; i++)
{
_current = _current.Next;
}
}
Use custom classes rather than anonymous classes. This encapsulates your code better and it is easier to decode what you've done. Also now if you want to test different shufflers you can re-use a Card class.
public class Card
{
public enum Suit
{
Clubs,
Diamonds,
Hearts,
Spades
}
public enum Rank
{
Two = 2,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nine,
Ten,
Jack,
Queen,
King,
Ace
}
public Rank rank { get; set; }
public Suit suit { get; set; }
public Card() { }
public Card(Suit suit, Rank rank)
{
this.rank = rank;
this.suit = suit;
}
public Card(int deckPosition)
{
rank = (Rank)((deckPosition % 13) + 2);
suit = (Suit)(deckPosition / 13);
}
public override string ToString()
{
return $"{rank} of {suit}";
}
}