在C#.NET中,是否有理由没有StringDictionary的复制构造函数?

Pan*_*cus 2 .net c# collections dictionary stringdictionary

如果这是一个愚蠢的问题,我道歉,但请听我说:

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);
Run Code Online (Sandbox Code Playgroud)

在上面的代码示例中,我可以创建一个通用字典的副本.

现在假设我使用的是System.Collections.Specialized.StringDictionary,因为我不喜欢到处键入"字符串"类型.StringDictionary没有复制构造函数!实际上,它只有默认构造函数.

当然,我可以遍历StringDictionary并手动添加每个键/值对,但我不想:-P

为什么没有复制构造函数?我在这里错过了什么吗?

And*_*are 9

这种StringDictionary类型相当过时.我想这Dictionary<String,String>就是你想在这里使用的东西.

Dictionary<TKey,TValue>类型实现了一些强类型接口(ICollection<KeyValuePair<TKey, TValue>>IEnumerable<KeyValuePair<TKey, TValue>>),这使得它比StringDictionary类型更有用.

虽然StringDictionary类型强类型的,但我不会仅仅为了懒惰而建议使用它.

  • 我认为他说通用类型DOES有这种构造函数,但旧的专用字典却没有. (2认同)

Kel*_*tex 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;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

StringDictionary newdict = olddict.NewCopy();
Run Code Online (Sandbox Code Playgroud)