函数返回相同的值而不是唯一值

时间:2015-05-03 21:12:39

标签: c# memory random reference

我在sof上找到了这个例子。当我使用它时,代码在单个调用时按设计工作。如果我多次调用GiveMeaNumber,它会返回相同的确切数字,尽管调用次数。但是,如果我调试代码并逐步执行每个调用,我可以看到为每次调用函数分配的唯一编号。我的问题是当我尝试将此信息写入控制台而不是获取所有唯一值时,我得到相同的值x次。我可以获得写入控制台的唯一值的唯一方法是调试并逐步执行对函数的每次调用。有人可以解释为什么会发生这种情况并提出可行的解决方案我希望函数能够在每次调用时返回唯一值。我猜可能存在某种记忆或参考问题?

int main() 
{
    int num1 = GiveMeANumber();
    int num2 = GiveMeANumber();
    int num3 = GiveMeANumber();
Console.WriteLine(num1 + ", " +
}

private int GiveMeANumber()
{
    var exclude = new HashSet<int>() { 5, 7, 17, 23 };
    var range = Enumerable.Range(1, 100).Where(i => !exclude.Contains(i));

    var rand = new System.Random();
    int index = rand.Next(0, 100 - exclude.Count);
    return range.ElementAt(index);
}

1 个答案:

答案 0 :(得分:3)

这是因为您的随机对象以相同的种子开头。将它的声明和作业移到班级。