捕获KeyNotFoundException比检查密钥是否存在更有效?

问题描述 投票:0回答:1

假设我们有一个类作为键和索引的字典,如果该项存在,我们想要返回该项,否则返回null。哪个更有效?

if(myDictionary.ContainsKey(myKey))
    return myDictionary[myKey];
return null;

要么

try { return myDictionary[myKey]; }
catch { return null; }
c# dictionary try-catch
1个回答
3
投票

虽然效率是软件开发中应该考虑的问题,但它并不是唯一的问题。除非存在某些限制,如性能要求或节省嵌入式或移动设备上的电池,否则通常会首先考虑其他非功能性要求。可维护性(以及代码的可理解性)通常具有更高的优先级。

考虑到这一点,您不应将自己局限于一个选项。当字典中不存在该值时,如果不是错误,请使用TryGet。当您将缺失值视为错误时,请使用索引器。

话虽如此,当你检查the reference source的实际实现时,索引器和TryGet都从FindEntry获得值。 TryGet获得默认值(便宜)并返回。索引器不仅会返回,还会抛出异常。这使它更昂贵。

© www.soinside.com 2019 - 2024. All rights reserved.