前段时间做了一个项目,碰到一个问题,从记录的日志来看,老是出现“The given key was not present in the dictionary.”大意就是key不在对应的Dictionary中,然后程序就挂掉了。但是一气之下写了无数个try catch,有点心虚,不过好在看到《C#高级编程 第七版》上关于异常那章内容上说的,C#的try-catch 和C++的不一样,基本上不会对效率产生什么影响,心理总算好过了一点。
但那个恶心的问题依旧在,因为始终不知道到底是哪个key出错了,因为当时一直从索引的角度出发,一对"[ ]",貌似不能实现什么。今天在看一段代码的时候发现了Dictionary的TryGetValue()这个方法,看了一下msdn上的说明,说他是ContainsKey()和"[ ]"的一个combine,msdn推荐如果代码中频繁用到由key取value的操作,推荐使用TryGetValue这个方法,因为他是O(1)的时间复杂度(大概是这个意思)。呵呵。还不错。然后忽然明白,其实一开始的key也就找到解决方案了。就是写个扩展方法。
贴下代码,写的不好,还望大神完善。
首先是定义这个扩展方法(具体知识google或者百度,或者msdn);
public static class MyClass
{
public static string TryGetValueEx(this Dictionary<string, string> dic, string key)
{