📜  c# 随机数 - C# (1)

📅  最后修改于: 2023-12-03 14:39:48.229000             🧑  作者: Mango

C# 随机数

在编程中,生成随机数是非常常见的需求之一。在 C# 中,我们可以使用 Random 类来生成伪随机数,以满足我们的需求。

生成随机数

以下是 C# 生成随机数的示例代码:

Random random = new Random();
int randomNumber = random.Next();

上述代码将生成一个随机的整数。如果需要生成指定范围内的随机数,可以使用 Next(minValue, maxValue) 方法,例如:

int min = 1;
int max = 100;
int randomNumber = random.Next(min, max);

如上所示,Next() 方法的参数可以指定生成随机数的范围。

生成随机种子

在 C# 中,Random() 构造函数默认不带参数,将使用系统时钟作为随机生成种子。如果需要使用自定义的种子,可以使用 Random(seed) 构造函数,例如:

Random random = new Random(123);
int randomNumber = random.Next();

如上所示,我们将使用种子 123 来生成随机数。请注意,使用相同的种子生成的随机数序列是相同的,因此请注意在生产和测试等情况下使用不同的种子。

随机数生成器线程安全

由于 Random 类的实现并非线程安全的,因此在多线程环境下生成随机数需要特殊处理。以下是一个线程安全的随机数生成器的示例代码:

public static class ThreadSafeRandom
{
    private static readonly Random Global = new Random();
    [ThreadStatic]
    private static Random local;

    public static int Next()
    {
        Random inst = local;
        if (inst == null)
        {
            int seed;
            lock (Global) seed = Global.Next();
            local = inst = new Random(seed);
        }
        return inst.Next();
    }
}

如上所示,我们使用 ThreadStatic 属性来存储每个线程的 Random 实例,并使用锁定全局 Random 实例的方式来生成种子。

总结

以上是 C# 中生成随机数的示例代码,希望对你有所帮助。需要注意的是,在生成随机数时请遵循安全使用的原则,避免产生不必要的风险。