如何随机播放List <T>

gol*_*gle 1 .net c# generics

我在维基百科上发现了一段Java代码,它应该将数组调整到位:

public static void shuffle (int[] array)
{
    Random rng = new Random();
    int n = array.length;
    while (n > 1) 
    {
        n--;  
        int k = rng.nextInt(n + 1);
        int tmp = array[k];
        array[k] = array[n];
        array[n] = tmp;
    } 
}
Run Code Online (Sandbox Code Playgroud)

虽然我没有测试代码,但它看起来应该可以正常使用数组.在我的C#项目中,我创建了一个CardSet类,并在Shuffle()方法中使用了上面的代码:

public class CardSet
{
    private List<Card> cards;

    public Card this[int i]
    {
        get {  return cards[i];  }
        set {  cards[i] = value;  }
    }

    public void Shuffle()
    {
        Random rng = new Random();
        int n = this.NumberOfCards;

        while (n < 1)
        {
            n--;
            int k = rng.Next(n + 1);
            Card tmp = this[k];
            this[k] = this[n];
            this[n] = tmp;
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,当我使用该方法时,不会发生改组:

CardSet cs = new CardSet();
cs.Shuffle(); 

foreach (Card c in cs)
{
    Console.WriteLine(c.ToString());
}    
Run Code Online (Sandbox Code Playgroud)

我只是想不通为什么它不起作用.我认为List可能会自动对其对象进行排序,所以我尝试更改其中一个值,

cs[8] = new Card(Suites.Hearts, Numbers.Two);
Run Code Online (Sandbox Code Playgroud)

Card正是我说的.要么我犯了一些简单的错误,要么我没有正确地编写洗牌算法.如果我提供的代码看起来很好并且有人认为我的代码中的其他地方可能存在错误,那么我可以提供其余的代码.