Видимо в этой теме мне нужно сделать оговорку.
Пользователь форума,
Alexmd, задал вопрос в личку почему я предоставил в этой теме не оптимальное решение.
И, он совершенно прав!
Вполне ожидаемым должен был бы быть код примерно такой:
Random rand = new Random();
List<int> list = new List<int>{ 100,106,112,118,124};
return list[rand.Next(list.Count)];
Сравнение вариантов:
project.SendInfoToLog(string.Format("Старт"));
System.Diagnostics.Stopwatch stopWatch = System.Diagnostics.Stopwatch.StartNew();
Random rand = new Random();
int num = -1;
int item = 1000;
List<int> list = new List<int>(); // создаем список
stopWatch.Stop();
project.SendInfoToLog(string.Format("Создание объектов: {0:c}", stopWatch.Elapsed));
project.SendInfoToLog(string.Format("Старт"));
stopWatch = System.Diagnostics.Stopwatch.StartNew();
for(int i=0;i<item;i++) list.Add(i); // добавляем число
stopWatch.Stop();
project.SendInfoToLog(string.Format("Наполнение списка: {0:c} итерация: {1}", stopWatch.Elapsed, item));
project.SendInfoToLog(string.Format("Старт"));
stopWatch = System.Diagnostics.Stopwatch.StartNew();
num = list.OrderBy(x => Guid.NewGuid()).Take(1).ToList()[0]; // Берем случайное значение
stopWatch.Stop();
project.SendInfoToLog(string.Format("Создание случайных строк + сортировка + выборка первого: {0:c}", stopWatch.Elapsed));
project.SendInfoToLog(string.Format("Старт"));
stopWatch = System.Diagnostics.Stopwatch.StartNew();
num = list[rand.Next(list.Count)];
stopWatch.Stop();
project.SendInfoToLog(string.Format("Выборка случайного: {0:c} ms", stopWatch.Elapsed));
В целом, для маленьких списков/массивов (как в шапке темы) я использую обычно именно этот вариант, из-за чего его и указал.
С одной стороны я ленивый - написать
Random r = new Random()
это много символов.
С другой стороны когда я использую где-то AsParallel и нужно вытащить случайное значение из 4-5 элементов на каждой итерации - то стандартный рандом там не подходит (внутреннее состояние может быть нарушено) - а создание его экземпляра в каждом потоке многопотока - мне кажется, что лучше всё же создавать новый guid.
Не претендую на истину в первой инстанции.
Однозначно, прежде чем копировать и вставлять код нужно каждую строчку тщательно изучить в
документации.