Методы расширения для генерации случайных чисел двойной дочности в C#
В этом примере добавляются методы расширения класса Random для генерации двойных значений в указанном диапазоне.
Класс Random предоставляет методы для генерации псевдослучайных чисел. Метод Next имеет три перегруженные версии, которые производят неотрицательное целое число, целое число от 0 до некоторой верхней границы и целое число между нижней и верхней границами.
Странно, что метод NextDouble класса Random имеет только одну версию, которая возвращает значение между 0.0 и 1.0. Этот пример добавляет две другие очевидные версии для создания двойных значений между 0.0 и верхней границей и между двумя границами.
Следующий код показывает класс RandomExtensions, который реализует методы расширения.
public static class RandomExtensions { // Возвращает случайное значение от 0 включительно и max. public static double NextDouble(this Random rand, double max) { return rand.NextDouble() * max; } // Возвращает случайное значение между min inclusive и max exclusive. public static double NextDouble(this Random rand, double min, double max) { return min + (rand.NextDouble() * (max - min)); } }
Здесь нет больших ухищрений. Первый метод использует исходный метод NextDouble для получения значения между 0.0 и 1.0. Он умножает это на верхнюю границу, чтобы получить значение между 0.0 и верхней границей и возвращает результат.
Второй метод также использует исходный метод NextDouble для получения значения между 0.0 и 1.0. Он умножает это на (max - min) и добавляет это к нижней границе. Поскольку генератор случайных чисел дает значение между 0.0 и 1.0, результат между:
min + 0.0 * (max - min) = min
и
min + 1.0 * (max - min) = min + (max - min) = max
Значение находится между min и max по желанию, поэтому метод возвращает его.
Источник: