症状
字典查找抛出 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);
验证
用原先缺失的键调用查找;不再抛异常且返回兜底值。补一个测试覆盖缺失键路径。