Bunun için bir çok yöntem var. Bazıları şöyle:
1. LINQ kullanarak OrderBy ile karıştarıbilirsin.
List<int> yeniListe = liste.OrderBy(a => Guid.NewGuid()).ToList();
2. LINQ ve Random kullanarak karıştırabilirsin.
Random rnd = new Random();
List<int> yeniListe = liste.OrderBy<T, int>((item) => rnd.Next()).ToList();
3. LINQ kullanmadan klasik karıştırma yöntemini (
Fisher-Yates Shuffle) kullanabilirsin. Bu yöntemde yeni bir liste oluşturman da gerekmez. Zaten Guid kullanan örneği hız yönünden kalabalık listelerde tercih etmemek lazım.
Bu örnekte bir genişletme yöntemi var. Tabi üsttekiler de birer genişletme yöntemi olarak yazılabilir. Genişletme yöntemleri hakkında
şuradan bilgi alabilirsiniz.
public static class GenisletmeYontemlerim
{
public static void ListeyiKaristir<T>(this IList<T> liste)
{
Random rnd = new Random();
int n = liste.Count;
while (n > 1)
{
n--;
int k = rnd.Next(n + 1);
T deger = liste[k];
liste[k] = liste[n];
liste[n] = deger;
}
}
}
Kullanımı:
liste.ListeyiKaristir();