Hi I coded this OneAtRandom() extension method:
public static class GenericIListExtensions { public static T OneAtRandom<T>(this IList<T> list) { list.ThrowIfNull("list"); if (list.Count == 0) throw new ArgumentException("OneAtRandom() cannot be called on 'list' with 0 elements"); int randomIdx = new Random().Next(list.Count); return list[randomIdx]; } } Testing it using this unit test fails:
[Test] public void ShouldNotAlwaysReturnTheSameValueIfOneAtRandomCalledOnListOfLengthTwo() { int SomeStatisticallyUnlikelyNumberOf = 100; IList<string> list = new List<string>() { FirstString, SecondString }; bool firstStringFound = false; bool secondStringFound = false; SomeStatisticallyUnlikelyNumberOf.Times(() => { string theString = list.OneAtRandom(); if (theString == FirstString) firstStringFound = true; if (theString == SecondString) secondStringFound = true; }); Assert.That(firstStringFound && secondStringFound); } It seems that int randomIdx = new Random().Next(list.Count);is generating the same number 100 times in a row, I think possibly because the seed is based on the time?
How can I get this to work properly?
Thanks :)