C# Dictionary填充失败求助:无法完成‘Find Word’小游戏字典初始化
问题分析与解决
你的代码会抛出ArgumentException,核心问题如下:
1. 键数组k的赋值逻辑错误
第一个for循环里,你在循环体额外写了i++,导致每次循环i会递增两次:
for (int i = 0; i < k.Length; i++) { k[i] = i; i++; // 此处多了一次递增操作 }
这会让k数组只有偶数索引(0、2、4...)被赋值为对应数字,奇数索引(1、3、5...)的默认值是0。当第二个循环执行到i=1时,你尝试添加键0(k[1]的值),但此时Dictionary中已存在键0,而Dictionary不允许重复键,直接触发异常。
2. 冗余的键数组k
完全没必要单独创建k数组,你要使用的键就是循环索引i,直接用i作为键即可,既简化代码又避免错误。
修复后的代码
static void Main(string[] args) { Dictionary<int, string> wordDictionary = new Dictionary<int, string>(); string[] values = new string[] { "аванс", "адрес", "атлас", "вальс", "голос", "запас", "афера", "обвал", "кокос", "анонс", "лотос", "обжог", "нюанс", "дюшес", "опрос", "оазис", "окрас", "парус", "пафос", "пегас", "акула", "барка", "белка", "жажда", "кобра", "крыса", "почка", "пасха", "пачка", "секта", "обзор", "отдых", "ответ", "орден", "вагон", "венец", "ветка", "врата", "волна", "выдра", "газон", "глава", "гонец", "горох", "грудь", "дверь", "девиз", "диета", "длина", "досуг", "кабан", "каток", "квота", "кефир", "конюх", "кокос", "лаваш", "ладья", "лемур", "ловец", "магия", "мазут", "майор", "метил", "мумия", "наряд", "нерпа", "носок", "нитка", "недуг", "пакет", "палач", "перец", "песок", "пешка", "пожар", "побег", "позор", "приют", "птица", "радио", "разум", "ребро", "рывок", "русло", "салат", "салон", "сенат", "талон", "титан", "туфля", "уксус", "улица", "херес", "химия", "чайка", "череп", "шишка", "шорох" }; for (int i = 0; i < values.Length; i++) { wordDictionary.Add(i, values[i]); } Console.WriteLine(wordDictionary[5]); // 输出 "запас" Console.ReadLine(); }
额外优化建议
- 变量名遵循C#编码规范:局部变量用
camelCase(比如Word改为wordDictionary,value改为values),提升代码可读性。 - 数组初始化时省略长度,让编译器自动计算元素数量,避免手动计数出错。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

