【发布时间】:2011-10-27 13:12:34
【问题描述】:
我们最近遇到了一个问题,我们调用字典来检索一个值,期望键存在。它不会导致进程中断。
ReSharper 是否具有像我听说的那样检查空对象的功能?
这里有一个例子来支持我所说的:
Dictionary<String, Entity> allEntities =
new Dictionary<String, Entity>(SringComparer.OrdinalIgnoreCase);
allEntities.AddMany(db.GetAllEntities());
Entity thisEntity = allEntities[entityID];
// <-- error here as EntityID isn't in all entities...
我希望 ReSharper 能够说我没有像这样检查过字典:
if (allEntities.ContainsKey(entityID))
...
作为一个仅供参考,我没有 ReSharper,但这将是添加到业务案例中以供所有开发人员使用的另一件事。
【问题讨论】:
-
您希望 ReSharper 如何知道您的数据库调用将产生什么值?
-
更新了问题以及可能的解决方案...
-
您是否还希望它在每次除以两个整数时发出警告,检查分母是否为零?您是否还希望它在您每次调用
string.Substring时向您发出警告,以检查参数是否在字符串的范围内?如果找不到密钥,获取Dictionary.Item会抛出KeyNotFuondException这一事实几乎不是什么秘密。有人可能会说 C# 开发人员应该知道,而不是被工具提醒... -
我认为这个功能可能很好,也许只是作为一个建议或提示。在获取值之前检查字典是否包含键比捕获
KeyNotFoundException要好得多