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

C# WinForms Hangman游戏显示下划线时触发ArgumentOutOfRangeException

解决Hangman游戏中的ArgumentOutOfRangeException异常

嘿,我一眼就发现你代码里的问题啦!先看看这段循环里的关键错误:

for (int i = 0; i < data.solution.Length; i++) 
{
    underline = new List<Label>(); // 这里每次循环都新建空列表!
    underline[i].Parent = this; // 空列表访问索引i肯定报错
    // ... 其他代码
}

问题根源

你在循环内部每次都重新创建了一个空的List<Label>,这意味着每次循环时underline都是没有任何元素的空集合。当你尝试访问underline[i]的时候,自然会触发ArgumentOutOfRangeException——空列表里根本找不到索引为i的元素呀!

修复后的代码

把列表的初始化移到循环外面,然后在循环里创建新的Label实例并添加到列表中:

// 把列表初始化移到循环外面,只创建一次
List<Label> underline = new List<Label>(); 
int left = 300; 
int top = 275; 

for (int i = 0; i < data.solution.Length; i++) 
{
    // 新建一个Label实例,先把所有属性设置好
    Label newUnderline = new Label();
    newUnderline.Parent = this;
    newUnderline.Text = "_";
    newUnderline.Size = new Size(35, 35);
    newUnderline.Location = new Point(left, top);
    left += 30;
    newUnderline.Font = new Font(new FontFamily("Microsoft Sans Serif"), 20, FontStyle.Bold);
    
    // 把配置好的Label添加到列表里
    underline.Add(newUnderline);
}

为什么这样能解决问题?

  1. 现在列表只在循环前初始化一次,不会每次循环都被清空重置。
  2. 每次循环我们先创建完整的Label实例、设置好所有属性,再添加到列表中,彻底避免了直接访问空列表索引的操作。
  3. 后续游戏逻辑(比如猜对字母时替换对应位置的下划线)也能通过underline列表轻松访问到所有生成的标签。

内容的提问来源于stack exchange,提问作者lapartman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:50:57