假设我们有一个类作为键和索引的字典,如果该项存在,我们想要返回该项,否则返回null。哪个更有效?
if(myDictionary.ContainsKey(myKey))
return myDictionary[myKey];
return null;
要么
try { return myDictionary[myKey]; }
catch { return null; }
虽然效率是软件开发中应该考虑的问题,但它并不是唯一的问题。除非存在某些限制,如性能要求或节省嵌入式或移动设备上的电池,否则通常会首先考虑其他非功能性要求。可维护性(以及代码的可理解性)通常具有更高的优先级。
考虑到这一点,您不应将自己局限于一个选项。当字典中不存在该值时,如果不是错误,请使用TryGet
。当您将缺失值视为错误时,请使用索引器。
话虽如此,当你检查the reference source的实际实现时,索引器和TryGet
都从FindEntry
获得值。 TryGet
获得默认值(便宜)并返回。索引器不仅会返回,还会抛出异常。这使它更昂贵。