2

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

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

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

4

4 回答 4

9

StringDictionary类型相当陈旧。我认为这Dictionary<String,String>就是你想在这里使用的。

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

虽然该StringDictionary类型强类型的,但我不建议仅出于懒惰而使用它。

于 2009-07-15T15:07:06.347 回答
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();
于 2009-07-15T15:13:24.107 回答
2

我同意共识——你最好使用Dictionary<string, string>. 但是,如果您不喜欢一直键入泛型类型,则可以创建自己的子类:

public class StringDict : Dictionary<string, string>
{
  // duplicate all Dictionary's constructors here, calling the base constructor for each. 
}

瞧!每当您想使用 stringDictionary时,请StringDict改用。

于 2009-07-15T15:15:00.873 回答
1

如果您不想在任何地方键入“字符串”类型但又Dictionary<string,string>Dictionary<string,string>. 您甚至可以调用它StringDictionary,只要它位于不同的命名空间中。

于 2009-07-15T15:13:26.197 回答