C# 随机数:0或1

C# 随机数:0或1,c#,random,C#,Random,我看得太远了,以至于看不到像选择数字0或1这样简单的东西吗 Random rand = new Random(); if (rand.NextDouble() == 0) { lnkEvents.CssClass = "selected"; } else { lnkNews.CssClass = "selected"; } 如果你想要

我看得太远了,以至于看不到像选择数字0或1这样简单的东西吗

        Random rand = new Random();

        if (rand.NextDouble() == 0)
        {
            lnkEvents.CssClass = "selected";
        }
        else
        {
            lnkNews.CssClass = "selected";
        }

如果你想要50/50的概率,我建议:

Random rand = new Random();

if (rand.NextDouble() >= 0.5)
    lnkEvents.CssClass = "selected";
else
    lnkNews.CssClass = "selected";
Random.NextDouble()
将从0中选择任何小于1.0的双精度数字。这些数字中的大多数都不是零,因此您的分布不会像您预期的那样均匀

Random rand = new Random();

if (rand.Next(0, 2) == 0)
    lnkEvents.CssClass = "selected";
else
    lnkNews.CssClass = "selected";

在下限(包含)和上限(排除)之间选择一个随机整数。

使用该方法(而不是该方法)似乎可以更清楚地表达您想要做的事情(在两个值之间进行选择)


生成的值“大于或等于零,小于”
ExclusiveUpperBound

,如果不是在一个可以使用的紧循环中

(DateTime.Now.Millisecond % 2) - double DateTime.Now.Millisecond % (double) 10) / 10

一个非常简单的方法可以是:

Random random = new Random();
bool result = random.Next(0, 2) != 0;

然后用结果作为你的逻辑。

今年的轻描淡写说法是“不如你预期的那样平”。实际上,所有生成的结果都是1。作为记录:我从未见过PRNG返回零。几个月前,我对它们进行了很多测试:-)是的-目前概率还远没有达到这个程度。:-。这就是我想要的;理想情况下,应该被困在其他地方,而不是调用rand.Next。理想情况下,它应该初始化一次。@Brian Random不是线程安全的,因此如果同时使用,您的建议将需要同步。@Tom:一个有效点。使用
CssClass
意味着这很有可能。令人高兴的是,Jon Skeet解决了这个问题。下面所有的解决方案都是创建一个新的随机对象。这很好,除非你很快就创建了一堆。如果你这样做了,那么很有可能它们都有相同的随机种子,你会一次又一次地得到相同的结果。为避免此问题,请在程序中的某个位置创建一个随机类并将其传递给其他人。随机类中不存在NextDouble
Random random = new Random();
bool result = random.Next(0, 2) != 0;