StringDictionary vs Dictionary <string,string =“”> </string,>

时间:2009-03-09 19:44:24

标签: generics .net-3.5 collections dictionary stringdictionary

有没有人知道System.Collections.Specialized.StringDictionary对象和System.Collections.Generic.Dictionary之间的实际差异是什么?

我过去一直都在使用它们而没有考虑哪种方法表现更好,与Linq更好地工作,或者提供任何其他好处。

关于为什么我应该使用一个而不是另一个的任何想法或建议?

7 个答案:

答案 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

中的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

答案 5 :(得分:1)

除了是一个更“现代”的类之外,我注意到Dictionary比StringDictionary有更大的内存效率。

答案 6 :(得分:1)

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