Sco*_*vey 74 generics collections dictionary stringdictionary .net-3.5
有谁知道System.Collections.Specialized.StringDictionary对象和System.Collections.Generic.Dictionary之间的实际差异是什么?
我过去一直使用它们而没有考虑哪种方法表现更好,与Linq更好地工作,或者提供任何其他好处.
关于为什么我应该使用一个而不是另一个的任何想法或建议?
Meh*_*ari 88
Dictionary<string, string>是一种更现代的方法.它实现了IEnumerable<T>它,更适合LINQy的东西.
StringDictionary是旧学校的方式.在仿制药之前它就在那里.我只会在与遗留代码接口时才使用它.
jos*_*ley 40
还有一点.
返回null:
StringDictionary dic = new StringDictionary();
return dic["Hey"];
Run Code Online (Sandbox Code Playgroud)
这引发了一个异常:
Dictionary<string, string> dic = new Dictionary<string, string>();
return dic["Hey"];
Run Code Online (Sandbox Code Playgroud)
Ree*_*sey 36
我认为StringDictionary已经过时了.它存在于框架的v1.1中(在泛型之前),所以它当时是一个优秀的版本(与非泛型字典相比),但在这一点上,我不相信它有任何特定的优点在字典.
但是,StringDictionary有一些缺点.StringDictionary会自动降低您的键值,并且没有控制它的选项.
看到:
http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/59f38f98-6e53-431c-a6df-b2502c60e1e9/
Jef*_*Roe 35
正如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);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在添加这个回复,以吸引更多关注这个巨大的差异,IMO比现代与老派差异更重要.