代码之家  ›  专栏  ›  技术社区  ›  Scott Ivey

StringDictionary vs Dictionary<字符串,字符串>

  •  71
  • Scott Ivey  · 技术社区  · 17 年前

    有人知道System.Collections.Specialized.StringDictionary对象和System.Collections.Generic.Dictionary之间的实际区别吗?

    我在过去使用过这两种方法,但没有考虑到哪种方法性能更好,与Linq一起工作更好,或者提供任何其他好处。

    关于为什么我应该使用其中一个而不是另一个,有什么想法或建议吗?

    7 回复  |  直到 17 年前
        1
  •  92
  •   Mehrdad Afshari    17 年前

    Dictionary<string, string> 这是一种更现代的方法。它实现 IEnumerable<T> 而且它更适合灵巧的东西。

    StringDictionary

        2
  •  43
  •   joshcomley    15 年前

    这将返回空值:

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

    这会引发一个异常:

    Dictionary<string, string> dic = new Dictionary<string, string>();
    return dic["Hey"];
    
        3
  •  40
  •   Jeff Roe    12 年前

    正如里德·科佩所指出的那样,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);
        }
    }
    

    我加上这个答复是为了引起更多的注意 差异,这比现代与旧式的差异更重要。

        4
  •  39
  •   Reed Copsey    17 年前

    我认为StringDictionary已经过时了。它存在于框架的v1.1中(在泛型之前),因此它在当时是一个更好的版本(与非泛型字典相比),但在这一点上,我不认为它比字典有任何特定的优势。

    然而,StringDictionary也有缺点。StringDictionary会自动降低键值的大小写,并且没有控制该键值的选项。

    见:

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

        5
  •  3
  •   ArekBee    15 年前

    StringDictionary 来自.NET1.1并实现 IEnumerable

    Dictionary<string, string> 来自.NET2.0并实现 IDictionary<TKey, TValue>,IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable

    IgnoreCase仅为输入设置 字符串字典

    字典<字符串,字符串> 这对林克有好处

            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
    
        6
  •  1
  •   Daniel    15 年前

        7
  •  1
  •   Matt Lyons-Wood    13 年前

    另一个相关的观点是(如果我错了,请纠正我) System.Collections.Generic.Dictionary 无法在应用程序设置中使用( Properties.Settings )鉴于 System.Collections.Specialized.StringDictionary 是