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