C#中Foreach循环调试正常,直接运行失效的问题排查
优化你的随机数生成代码
首先得提一句,你这段代码里藏着个很容易踩的坑——在foreach循环内部每次实例化Random对象。因为Random默认用系统当前时间作为种子,循环执行速度极快的时候,多次实例化的Random会拿到完全相同的种子,最后生成一堆重复的随机数,这绝对不是你想要的结果。
给你调整后的完整代码:
try { List<int> randoms = new List<int>(); // 把Random实例化移到循环外,只创建一次就够了 Random r = new Random(); foreach (enemy m in enemyList) { // 注意:Random.Next的上限是开区间,要生成1-2000(包含2000)的数,得写2001 int i = r.Next(1, 2001); randoms.Add(i); } // 循环结束后的逻辑 int highest = randoms.Max(); int rate = -1; // 第二个foreach循环的后续操作示例 foreach (int num in randoms) { // 这里替换成你的实际处理逻辑,比如: // Console.WriteLine($"当前随机数:{num}"); } } catch (Exception ex) { // 建议补上异常处理,避免意外情况导致程序崩溃 Console.WriteLine($"执行出错:{ex.Message}"); }
关键细节说明:
Random实例化位置:把Random放在循环外面,只创建一次。它内部会维护一个随机状态,每次调用Next()都会更新这个状态,这样才能生成真正不重复的随机序列。Next()参数注意点:Random.Next(minValue, maxValue)的maxValue是排他的,你的原代码写了2000,实际生成的是1到1999的数;如果要包含2000,得把第二个参数改成2001。- 补充异常处理:原代码只有
try没有catch,补上后能避免遍历列表、生成随机数时出现意外错误直接导致程序中断。
如果还有关于第二个foreach循环的逻辑优化需求,随时说就行~
内容的提问来源于stack exchange,提问作者user9560973
相关产品推荐
相关产品推荐

