有谁知道System.Collections.Specialized.StringDictionary对象和System.Collections.Generic.Dictionary之间的实际区别是什么?
过去,我都曾使用过它们,而没有考虑过哪种性能更好,与Linq更好地配合使用或提供其他好处。
关于我为什么要在另一个上使用的任何想法或建议?
Answers:
Dictionary<string, string>
是一种更现代的方法。它实现了IEnumerable<T>
,并且更适合LINQy东西。
StringDictionary
是老派的方式。仿制药问世之前就在那里。我只会在与遗留代码接口时使用它。
StringDictionary
表现较差(尽管多数情况下都不重要)。坦白说,实际上,我之前有一个概念,那StringDictionary
就是某种专门的集合,旨在string
在关键时加快速度,而令我惊讶的是,当它在我的测试中表现较差时,我在Google上搜索了一下,只是发现它是非通用的
还有一点。
返回null:
StringDictionary dic = new StringDictionary();
return dic["Hey"];
这将引发异常:
Dictionary<string, string> dic = new Dictionary<string, string>();
return dic["Hey"];
Dictionary<>
手段,我可以永远使用[]
。使用StringDictionary已清理了我的大部分代码。
[ ]
因为它会引发异常,所以我从不使用。(StringDictionary仅针对一种类型的词典解决此问题)
正如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/zh-CN/netfxbcl/thread/59f38f98-6e53-431c-a6df-b2502c60e1e9/
StringDictionary
可以使用Properites.Settings
,而Dictionary<string,string>
不能。不管它是否过时,仍然有一些用途StringDictionary
。
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
Dictionary<string,string>
对所有新代码都使用(除非您需要定位到1.1)。