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

如何检查输入字符与单词字符是否匹配?解决System.InvalidCastException异常

问题分析与修复

错误根源

你这段代码的核心问题有两个:

  1. 集合存储错误:word.Add(currentWords[0].ToCharArray()) 是把整个字符数组当成单个元素塞进了ArrayList,导致word里存的是char[]类型对象,不是单个字符。后续用Convert.ToChar(word[i])试图把数组转成字符,直接触发类型转换异常。
  2. 逻辑冗余bug:每次调用KeyCheck都会往word里重复添加字符数组,导致集合元素越来越多,完全偏离了检查单个字符的需求。

优化修复后的代码(推荐用泛型集合)

// 提前初始化目标字符集合,只在加载单词时赋值一次
private List<char> targetChars = new List<char>();

// 初始化目标单词的字符集合,比如在游戏加载/切换单词时调用
private void InitTargetWord()
{
    targetChars.Clear();
    targetChars.AddRange(currentWords[0].ToCharArray());
}

private bool KeyCheck(char key)
{
    if (targetChars.Contains(key))
    {
        correct++;
        return true;
    }
    incorrect++;
    return false;
}

如果你坚持用ArrayList(不推荐,泛型集合更安全高效)

private ArrayList word = new ArrayList();

private void InitTargetWord()
{
    word.Clear();
    // 把每个字符单独加入集合,而非整个数组
    word.AddRange(currentWords[0].ToCharArray());
}

private bool KeyCheck(char key)
{
    foreach (char c in word)
    {
        if (c == key)
        {
            correct++;
            return true;
        }
    }
    incorrect++;
    return false;
}

关键修复点

  • 把目标单词的每个字符单独存入集合,而非存储整个字符数组。
  • 集合仅初始化一次,避免每次检查都重复添加元素。
  • 优先使用泛型集合(如List<char>)替代ArrayList,消除不必要的类型转换风险。

内容的提问来源于stack exchange,提问作者no-one

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:20:43