为何在代码位置B使用Random类时有时无控制台输出?
问题原因解析
核心差异:随机数生成时机
- 当
result定义在循环外部(A位置):只会生成一次随机索引,这个索引的范围是0到movie.Count-1,循环遍历列表时,必然会找到i等于该索引的元素,所以能稳定输出对应影片。 - 当
result定义在循环内部(B位置):每一次循环迭代都会重新生成一个新的随机数,这时候只有当当前循环的i恰好等于这次新生成的随机数时,才会触发输出。
你遇到的“result为0却无输出”的原因
你看到的result=0,是某一次循环迭代中生成的随机数,但此时循环的i并不等于0(比如i=3、i=5的时候),所以movie[i].Index.Equals(result)的条件不成立,自然不会输出索引0对应的影片。如果全程循环下来,没有任何一次i和当前迭代生成的result相等,就会完全没有输出。
额外优化建议
这段代码完全不需要用循环查找,直接通过随机索引访问列表元素即可,代码更简洁高效:
private static void PickRandomMovie(List<Movie> movie) { var rng = new Random(); var result = rng.Next(0, movie.Count); Console.WriteLine(movie[result].Title); }
内容的提问来源于stack exchange,提问作者tark98
相关产品推荐
相关产品推荐

