2015-05-03 103 views
0

我在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

错误:'new System.Random();'非常*永远*错误。 –

+0

每15分钟,同一个问题,相同的BUG :) – Dusan

+0

谢谢Marc Gravell的回应。 – snapplex

回答

3

这是因为你的随机对象以相同的种子开始。将其声明和分配移至课程级别。

+4

或将其作为参数传递给该方法。 –

+0

谢谢Zohar和Tim。 – snapplex

相关问题