如果这是一个愚蠢的问题,我道歉,但请听我说:
Dictionary<string, string> genericDict = new Dictionary<string, string>;
genericDict.Add("blah", "bloop");
// Use the copy constructor to create a copy of this dictionary
return new Dictionary<string, string>(genericDict);
在上面的代码示例中,我可以创建一个通用字典的副本。
现在假设我正在使用System.Collections.Specialized.StringDictionary,因为我不想在任何地方输入“字符串”类型。 StringDictionary没有复制构造函数!实际上,它只有默认的构造函数。
当然,我可以遍历StringDictionary并手动添加每个键/值对,但我不想:-P
为什么没有复制构造函数?我在这里错过了什么吗?
答案 0 :(得分:9)
StringDictionary
类型已经过时了。我认为Dictionary<String,String>
就是你想在这里使用的。
Dictionary<TKey,TValue>
类型实现了一些强类型接口(ICollection<KeyValuePair<TKey, TValue>>
和IEnumerable<KeyValuePair<TKey, TValue>>
),这使得它比StringDictionary
类型更有用。
虽然StringDictionary
类型 是强类型的,但我不会仅仅为了懒惰而建议使用它。
答案 1 :(得分:5)
如果您真的想使用StringDictionary(可能支持遗留应用程序),您可以创建扩展方法:
public static StringDictionary NewCopy(this StringDictionary olddict)
{
var newdict = new StringDictionary();
foreach (string key in olddict.Keys)
{
newdict.Add(key, olddict[key]);
}
return newdict;
}
然后你可以这样做:
StringDictionary newdict = olddict.NewCopy();
答案 2 :(得分:2)
我同意共识 - 你最好使用Dictionary<string, string>
。但是如果你不喜欢一直输入泛型类型,你可以创建自己的子类:
public class StringDict : Dictionary<string, string>
{
// duplicate all Dictionary's constructors here, calling the base constructor for each.
}
Et Voila!每当您想要使用字符串Dictionary
时,请使用StringDict
代替。
答案 3 :(得分:1)
如果您不想在任何地方键入“字符串”类型,但对Dictionary<string,string>
感到满意,则创建一个子类Dictionary<string,string>
的新类,并且不要覆盖任何方法。您甚至可以将其称为StringDictionary
,只要它位于不同的命名空间中即可。