代码的实现是调用Random(0, 1)(即随机产生0,1)来实现Random(a, b),代码如下: public static class RandomExtend
{
//private static Random random = new Random(); public static int RandomNumber(int min, int max)
{
if (min > max)
{
throw new InvalidOperationException("The max value must be great than max");
} Random random = new Random();
int flag = random.Next(0, 2); if (max - min <= 1)
{
return flag == 0 ? min : max;
} int middle = (min + max) / 2;
return flag == 0 ? RandomNumber(min, middle) : RandomNumber(middle + 1, max);
}
}这样如果调用RandomNumber(1, 10)的话就只会产生1或者10。说明后来的递归都是使用了第一次random.Next(0,2)产生的数
如果代码改成如下: public static class RandomExtend
{
private static Random random = new Random(); public static int RandomNumber(int min, int max)
{
if (min > max)
{
throw new InvalidOperationException("The max value must be great than max");
} //Random random = new Random();
int flag = random.Next(0, 2); if (max - min <= 1)
{
return flag == 0 ? min : max;
} int middle = (min + max) / 2;
return flag == 0 ? RandomNumber(min, middle) : RandomNumber(middle + 1, max);
}
}这样就会随机产生1-10的数字。
请问出现这样的原因是什么呢。是否编译器做了优化?如果是,为什么要优化,好处是什么
{
//private static Random random = new Random(); public static int RandomNumber(int min, int max)
{
if (min > max)
{
throw new InvalidOperationException("The max value must be great than max");
} Random random = new Random();
int flag = random.Next(0, 2); if (max - min <= 1)
{
return flag == 0 ? min : max;
} int middle = (min + max) / 2;
return flag == 0 ? RandomNumber(min, middle) : RandomNumber(middle + 1, max);
}
}这样如果调用RandomNumber(1, 10)的话就只会产生1或者10。说明后来的递归都是使用了第一次random.Next(0,2)产生的数
如果代码改成如下: public static class RandomExtend
{
private static Random random = new Random(); public static int RandomNumber(int min, int max)
{
if (min > max)
{
throw new InvalidOperationException("The max value must be great than max");
} //Random random = new Random();
int flag = random.Next(0, 2); if (max - min <= 1)
{
return flag == 0 ? min : max;
} int middle = (min + max) / 2;
return flag == 0 ? RandomNumber(min, middle) : RandomNumber(middle + 1, max);
}
}这样就会随机产生1-10的数字。
请问出现这样的原因是什么呢。是否编译器做了优化?如果是,为什么要优化,好处是什么
Random random = new Random(Guid.NewID().GetHashCode());