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
是。