有谁知道 System.Collections.Specialized.StringDictionary 对象和 System.Collections.Generic.Dictionary 之间的实际区别是什么?
我过去都使用过它们,并没有过多考虑哪个性能更好,与 Linq 一起工作更好,或者提供任何其他好处。
关于为什么我应该使用一个而不是另一个的任何想法或建议?
有谁知道 System.Collections.Specialized.StringDictionary 对象和 System.Collections.Generic.Dictionary 之间的实际区别是什么?
我过去都使用过它们,并没有过多考虑哪个性能更好,与 Linq 一起工作更好,或者提供任何其他好处。
关于为什么我应该使用一个而不是另一个的任何想法或建议?
Dictionary<string, string>
是一种更现代的方法。它实现IEnumerable<T>
并且更适合 LINQy 的东西。
StringDictionary
是老派的方式。它在仿制药时代之前就已经存在。我只会在与遗留代码交互时使用它。
还有一点。
这将返回 null:
StringDictionary dic = new StringDictionary();
return dic["Hey"];
这会引发异常:
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);
}
}
我添加这个回复是为了引起人们对这个巨大差异的更多关注,IMO 比现代与老式的差异更重要。
我认为 StringDictionary 已经过时了。它存在于框架的 v1.1 中(泛型之前),所以它在当时是一个优越的版本(与非泛型字典相比),但在这一点上,我不相信它有任何特定的优势在字典。
但是,StringDictionary 也有缺点。StringDictionary 自动将您的键值小写,并且没有用于控制它的选项。
看:
http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/59f38f98-6e53-431c-a6df-b2502c60e1e9/
StringDictionary
来自 .NET 1.1 并实现IEnumerable
Dictionary<string, string>
来自 .NET 2.0 并实现IDictionary<TKey, TValue>,IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable
IgnoreCase 只为 Key in 设置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
除了作为一个更“现代”的类之外,我注意到 Dictionary 比 StringDictionary 的内存效率大大提高。
另一个相关点是(如果我在这里错了,请纠正我)System.Collections.Generic.Dictionary
不能在应用程序设置(Properties.Settings
)中使用,而System.Collections.Specialized.StringDictionary
is.