Eine kleine aber feine Methode, die aus einer Enumeration einen zufälligen Eintrag zurück gibt.
Die Methode kann auf jede IEnumerable<T> angewendet werden.
Die Methode merkt sich NICHT, welche Einträge bereits zurück gegeben wurden. In der Statistik würde man dazu sagen "Ziehen mit Zurücklegen" ;).
var list = new List<MyClass>();
list.Add(new MyClass("Eins"));
list.Add(new MyClass("Zwei"));
// anItem ist entweder "Eins" oder "Zwei"
var anItem = list.Random();
private static Random _randomCache;
/// <summary>
/// return a random item from source list
/// </summary>
/// <typeparam name="T">generic type</typeparam>
/// <param name="source">source list</param>
/// <returns>random item</returns>
public static T Random<T>(this IEnumerable<T> source)
{
// use static randomizer
if (_randomCache == null) _randomCache = new Random(DateTime.Now.Millisecond);
// get index of random item
int index = _randomCache.Next(source.Count());
// return first item after a skip of "index"
return source.Skip(index).First();
}
2 Kommentare zum Snippet