Генерация случайных чисел

C#:
Генерация случайных чисел

Как это сделать:

Наиболее распространенный способ генерации случайных чисел в C# - использование класса System.Random. Вот простой пример, демонстрирующий его использование:

using System;

public class RandomNumberExample
{
    static void Main(string[] args)
    {
        Random random = new Random();
        int randomNumber = random.Next(1, 100); // Генерирует число между 1 и 99
        Console.WriteLine($"Случайное число: {randomNumber}");
    }
}

Это выведет случайное число, например:

Случайное число: 42

Для генерации случайного числа с плавающей точкой между 0,0 и 1,0 можно использовать метод NextDouble:

double randomDouble = random.NextDouble();
Console.WriteLine($"Случайное число с плавающей точкой: {randomDouble}");

Если вы работаете над приложением, чувствительным к безопасности, которое требует криптографической случайности, лучше использовать класс RNGCryptoServiceProvider, найденный в System.Security.Cryptography:

using System;
using System.Security.Cryptography;

public class SecureRandomExample
{
    static void Main()
    {
        byte[] randomNumber = new byte[4]; // Создает 4-байтовое длинное случайное число
        using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
        {
            rng.GetBytes(randomNumber);
        }
        int value = BitConverter.ToInt32(randomNumber, 0);
        Console.WriteLine($"Криптографически безопасное случайное число: {value}");
    }
}

Глубокое погружение

Генерация случайных чисел в C# эволюционировала на протяжении многих лет. Изначально класс System.Random был основным выбором для генерации псевдослучайных чисел. Псевдослучайность заключается в том, что при заданном начальном значении генератор будет производить одну и ту же последовательность чисел, что может быть полезно для отладки или повторяемости тестов.

Хотя для базовых потребностей это достаточно, System.Random не является потокобезопасным и может производить предсказуемые результаты, что не подходит для приложений, зависящих от безопасности. Это ограничение привело к введению RNGCryptoServiceProvider для криптографической случайности, которая более безопасна, но также более ресурсоемка.

Альтернативой в .NET Core и .NET 5+ является класс RandomNumberGenerator в System.Security.Cryptography для безопасной генерации случайных чисел, который предназначен как более современный и удобный вариант по сравнению с RNGCryptoServiceProvider.

Каждый метод генерации случайных чисел в C# имеет свое место в зависимости от требований к приложению. Для большинства приложений достаточно System.Random, но для тех, которым требуются безопасные, непредсказуемые случайные числа, криптографические классы предоставляют надежную альтернативу.