StringDictionary vs Dictionary <string,string>

有没有人有任何想法之间的System.Collections.Specialized.StringDictionary对象和System.Collections.Generic.Dictionary的实际区别?

我过去都用过,没有太多的考虑,哪个更好,Linq更好,还是提供其他好处。

任何想法或build议,为什么我应该使用一个在另一个?

Dictionary<string, string>是更现代的方法。 它实现了IEnumerable<T> ,它更适合LINQy的东西。

StringDictionary是老派的方式。 那是仿制药的日子呢。 我只会在与传统代码接口时才使用它。

我觉得StringDictionary已经过时了。 它存在于框架的v1.1(generics之前),所以它是当时的优秀版本(与非generics字典相比),但是在这一点上,我不认为它有任何特定的优势字典。

但是,StringDictionary有缺点。 StringDictionary会自动降低你的键值,并且没有控制这个的选项。

看到:

http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/59f38f98-6e53-431c-a6df-b2502c60e1e9/

还有一点。

这返回null:

 StringDictionary dic = new StringDictionary(); return dic["Hey"]; 

这引发了一个exception:

 Dictionary<string, string> dic = new Dictionary<string, string>(); return dic["Hey"]; 

正如Reed Copsey指出的那样,StringDictionary小写了你的关键值。 对我来说,这完全是出乎意料的,是一个表演的阻挡者。

 private void testStringDictionary() { try { StringDictionary sd = new StringDictionary(); sd.Add("Bob", "My name is Bob"); sd.Add("joe", "My name is joe"); sd.Add("bob", "My name is bob"); // << throws an exception because // "bob" is already a key! } catch (Exception ex) { MessageBox.Show(ex.Message); } } 

我在这个答复中提出了更多关注这个巨大的差异,其中国际海事组织比现代与老派之间的差异更重要。

StringDictionary来自.NET 1.1并实现IEnumerable

Dictionary<string, string>来自.NET 2.0,实现了IDictionary<TKey, TValue>,IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable

IgnoreCase仅在StringDictionary为Key设置

Dictionary<string, string>对于LINQ来说很好

  Dictionary<string, string> dictionary = new Dictionary<string, string>(); dictionary.Add("ITEM-1", "VALUE-1"); var item1 = dictionary["item-1"]; // throws KeyNotFoundException var itemEmpty = dictionary["item-9"]; // throws KeyNotFoundException StringDictionary stringDictionary = new StringDictionary(); stringDictionary.Add("ITEM-1", "VALUE-1"); var item1String = stringDictionary["item-1"]; //return "VALUE-1" var itemEmptystring = stringDictionary["item-9"]; //return null bool isKey = stringDictionary.ContainsValue("VALUE-1"); //return true bool isValue = stringDictionary.ContainsValue("value-1"); //return false 

除了是一个更“现代”的类,我注意到Dictionary比StringDictionary更有记忆效率。

另一个相关的一点是(纠正我,如果我在这里错了) System.Collections.Generic.Dictionary不能在应用程序设置( Properties.Settings )中使用,而System.Collections.Specialized.StringDictionary是。