← 中文资源

简体中文版本

C# KeyNotFoundException: 常见原因

修复 C# 的 KeyNotFoundException:改用 TryGetValue、GetValueOrDefault 或在访问前校验键。

阅读英文原文

症状

字典查找抛出 KeyNotFoundException。它只在键不存在时发生,因此在真实数据到达前不易暴露。

诊断

捕获键值并检查字典内容:

try {
    var v = dict[key];
} catch (KeyNotFoundException) {
    logger.LogError("missing key: [{Key}]", key);
    throw;
}

大小写或空白差异很常见:"User" 与 "user"。

修复

优先使用不会抛异常的查找:

if (dict.TryGetValue(key, out var value)) {
    return value;
}
return defaultValue;

// or
var v = dict.GetValueOrDefault(key, fallback);

必要时使用忽略大小写的比较器:

var map = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);

验证

用原先缺失的键调用查找;不再抛异常且返回兜底值。补一个测试覆盖缺失键路径。