3 回答

TA貢獻1813條經驗 獲得超2個贊
好的,.NET 2.0回答:
如果您不需要克隆值,則可以使用構造函數重載到Dictionary,它接受現有的IDictionary。(您也可以將比較器指定為現有字典的比較器。)
如果確實需要克隆值,可以使用以下內容:
public static Dictionary<TKey, TValue> CloneDictionaryCloningValues<TKey, TValue>
(Dictionary<TKey, TValue> original) where TValue : ICloneable
{
Dictionary<TKey, TValue> ret = new Dictionary<TKey, TValue>(original.Count,
original.Comparer);
foreach (KeyValuePair<TKey, TValue> entry in original)
{
ret.Add(entry.Key, (TValue) entry.Value.Clone());
}
return ret;
}
當然,這也依賴于TValue.Clone()適當的深度克隆。

TA貢獻1798條經驗 獲得超7個贊
您希望副本有多深,以及您使用的是什么版本的.NET?我懷疑如果您使用的是.NET 3.5,那么對ToDictionary進行LINQ調用(同時指定鍵和元素選擇器)將是最簡單的方法。
例如,如果您不介意該值是淺層克?。?/p>
var newDictionary = oldDictionary.ToDictionary(entry => entry.Key,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?entry => entry.Value);
如果您已經限制T實現ICloneable:
var newDictionary = oldDictionary.ToDictionary(entry => entry.Key,?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?entry => (T) entry.Value.Clone());
(這些是未經測試的,但應該有效。)

TA貢獻1796條經驗 獲得超4個贊
Dictionary<string, int> dictionary = new Dictionary<string, int>();
Dictionary<string, int> copy = new Dictionary<string, int>(dictionary);
- 3 回答
- 0 關注
- 777 瀏覽
添加回答
舉報