有没有人知道System.Collections.Specialized.StringDictionary对象和System.Collections.Generic.Dictionary之间的实际差异是什么?
我过去一直都在使用它们而没有考虑哪种方法表现更好,与Linq更好地工作,或者提供任何其他好处。
关于为什么我应该使用一个而不是另一个的任何想法或建议?
答案 0 :(得分:86)
Dictionary<string, string>
是一种更现代的方法。它实现了IEnumerable<T>
,它更适合LINQy的东西。
StringDictionary
是旧学校的方式。在仿制药之前它就在那里。我只会在与遗留代码接口时才使用它。
答案 1 :(得分:39)
另一点。
返回null:
StringDictionary dic = new StringDictionary();
return dic["Hey"];
这会引发异常:
Dictionary<string, string> dic = new Dictionary<string, string>();
return dic["Hey"];
答案 2 :(得分:36)
我认为StringDictionary已经过时了。它存在于框架的v1.1中(在泛型之前),所以它当时是一个优秀的版本(与非泛型字典相比),但在这一点上,我不相信它有任何特定的优点超过字典。
然而,StringDictionary有一些缺点。 StringDictionary会自动降低您的键值,并且没有控制它的选项。
请参阅:
http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/59f38f98-6e53-431c-a6df-b2502c60e1e9/
答案 3 :(得分:33)
正如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);
}
}
我正在添加此回复以吸引更多关注这种巨大的差异,IMO比现代与老派差异更重要。
答案 4 :(得分:2)
StringDictionary
来自.NET 1.1并实现IEnumerable
Dictionary<string, string>
来自.NET 2.0并实现IDictionary<TKey, TValue>,IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable
IgnoreCase仅为StringDictionary
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
答案 5 :(得分:1)
除了是一个更“现代”的类之外,我注意到Dictionary比StringDictionary有更大的内存效率。
答案 6 :(得分:1)
另一个相关点是(如果我在这里错了,请更正我)System.Collections.Generic.Dictionary
无法在应用程序设置(Properties.Settings
)中使用,而System.Collections.Specialized.StringDictionary
是。