C# C语言的更好的随机函数#

C# C语言的更好的随机函数#,c#,.net,random,C#,.net,Random,我正在生成许多随机数,我需要一个好的函数,因为这没有多大帮助: public static class Randomizer { static Random random = new Random((int)DateTime.Now.Ticks); public static int RandomInteger(int minimum, int maximum) { return random.Next(minimum, maximum + 1);

我正在生成许多随机数,我需要一个好的函数,因为这没有多大帮助:

public static class Randomizer
{
    static Random random = new Random((int)DateTime.Now.Ticks);

    public static int RandomInteger(int minimum, int maximum)
    {
        return random.Next(minimum, maximum + 1);
    }

    public static double RandomDouble()
    {
        return random.NextDouble();
    }
}
当我使用这个类时,我的数字通常是相同的。你有什么简单的方法可以提高随机发生器的性能吗

谢谢,
Ivan

请参见

您的号码相同的原因是,每次调用类时,您都会创建一个新的随机号码,这意味着它将使用DateTime.Now.Ticks中的相同号码进行种子设定

您应该将其设置为非静态类。实例化它一次,然后从对象重复调用相同的函数

有一个静态随机类,它工作起来没有任何问题


顺便问一下,您需要随机数还是唯一数?

旁注:使用
Environment.Ticks
而不是
DateTime.Now.Ticks
。或者,事实上,根本不提供自定义种子。@Ivan:哦,这并没有什么不同。只是,(a)使用绝对时间做任何事情都不是很好的做法(因为它取决于系统时间的变化),和(b)没有必要浪费时间,因为它在内部是这样做的。你是在多个线程上调用这个东西吗?这些数字是否比意外情况下更经常相同?我询问线程的原因是因为文档说明从多个线程调用该类是不安全的。事实上,当错误调用时,它的一个失败模式可能是开始一次又一次地吐出相同的数字。由于类中的随机场是静态的,它只实例化一次。他不创建
new random()
每次调用——或者他编辑了问题不,他不是——
静态随机随机
只初始化一次——他在哪里重新创建它?为True,或者在如下方法中启动“随机”:int randomInt=(new Random())。下一步(min,max)@dampee它应该只初始化一次,完全按照您刚才的建议操作是一个常见的错误,在这种情况下,您将得到重复的数字。再次单击链接。:)(有没有注意到“其他版本”下拉列表?)。你能告诉我如何生成一个随机数吗?我真的无法得到我想要的。请使用
RandomNumberGenerator.Create
对其进行实例化,然后每次对实例调用
GetBytes
,以填充字节数组。然后尝试使用
位转换器
的方法将其转换为整数。如果使用错误,则不会。我的意思是OP应该回答一些评论,而不是接受这些评论。@Henk:我同意——我认为问题出在其他地方。我回答了他的问题,但我不确定这是否是真正解决他的问题的解决方案。与OP唯一明显的区别是线程安全锁定假设OP在单线程环境中(大假设),不会有任何区别。