C# 如何在一个方法中使用另一方法生成的随机数且不重复生成
实现方案
核心思路是给窗体类新增成员变量存储已生成的随机下标,无需二次调用随机生成方法,同时优化不必要的重复IO操作,修改后代码如下:
public partial class Form1 : Form { // 存储挪威语文件内容,仅初始化加载1次 private string[] _norArr; // 存储英语文件内容,仅初始化加载1次 private string[] _engArr; // 存储上一次生成的随机下标,默认初始值-1代表还未生成过 private int _lastRandomIndex = -1; // 全局随机数实例,避免短时间多次实例化生成重复值 private Random _rnd = new Random(); public void ShuffleNor() { _lastRandomIndex = _rnd.Next(0, _norArr.Length); lbl_nor.Text = _norArr[_lastRandomIndex]; } public Form1() { InitializeComponent(); // 窗体初始化时一次性加载两个文件内容,避免每次点击按钮重复读磁盘 _norArr = File.ReadAllLines(@"C:\Users\Kapi\Desktop\no.txt"); _engArr = File.ReadAllLines(@"C:\Users\Kapi\Desktop\en.txt"); } private void btn_shuffle_Click(object sender, EventArgs e) { ShuffleNor(); } private void btn_check_Click(object sender, EventArgs e) { // 兼容未点击随机按钮直接点查询的异常场景 if(_lastRandomIndex < 0 || _lastRandomIndex >= _engArr.Length) { MessageBox.Show("请先点击随机按钮生成内容"); return; } lbl_eng.Text = _engArr[_lastRandomIndex]; } }
优化说明
- 移除了原代码中没有实际作用的
ShuffleNor方法入参l - 把重复的文件读取逻辑移到构造函数中执行,避免每次点击按钮都触发磁盘IO,提升响应速度
- 全局复用Random实例,避免短时间多次new Random生成重复的随机值
- 新增异常判断,避免用户先点击查询按钮出现下标越界报错
内容的提问来源于stack exchange,提问作者kacperekbajerek
相关产品推荐
相关产品推荐

