C #: Como devo embaralhar o conteúdo de uma matriz?

Eu tenho uma matriz de números inteiros chamados cartões [52]. Cada elemento contém um número inteiro que representa um cartão (os cartões [0] = 5 representariam os 6 dos clubes, por exemplo).

Foi assim que eu embaralhei a matriz. Funciona, mas estou recebendo repetições.

private void shuffleCards()
    {
        for (int i = 0; i < cards.Length; i++)
        {
            int randIndex = r.Next(0, 52);
            int origCard = cards[i];
            cards[i] = cards[randIndex];
            cards[randIndex] = origCard;
        }
    }

r é a variável aleatória que eu inicializei no início do programa.

Ao testar o programa, notei que receberia o mesmo cartão 2 ou 3 vezes. Obviamente, não consigo repetições, todas devem ser diferentes. Não vejo como esse método me repete.

Como posso embaralhar essa matriz sem repetições? Obrigado.

EDITAR

Ok, a função de reprodução aleatória não foi o problema. É a função deal () que está causando o problema.

private void deal()
    {
        for (int i = 0; i < 26; i++)
        {
            userCards[i] = cards[i];
            setUserValue(); //ignore this
        }
        for (int i = 26; i < 52; i++)
        {
            opponentCards[i - 26] = cards[i];
            setOpponentValue(); //ignore this
        }
    }

Sei com certeza que não é a função aleatória. Imprimi os resultados de todos os cartões em um arquivo de texto e não vi iterações. No entanto, quando as cartas são distribuídas ao usuário e ao oponente, é quando todas as iterações ocorrem. Algum conselho?

questionAnswers(1)

yourAnswerToTheQuestion