You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:45:03