3 回答

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
好的,.NET 2.0回答:
如果您不需要克隆值,則可以使用構(gòu)造函數(shù)重載到Dictionary,它接受現(xiàn)有的IDictionary。(您也可以將比較器指定為現(xiàn)有字典的比較器。)
如果確實(shí)需要克隆值,可以使用以下內(nèi)容:
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;
}
當(dāng)然,這也依賴于TValue.Clone()適當(dāng)?shù)纳疃瓤寺 ?/p>

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

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
Dictionary<string, int> dictionary = new Dictionary<string, int>();
Dictionary<string, int> copy = new Dictionary<string, int>(dictionary);
- 3 回答
- 0 關(guān)注
- 758 瀏覽
添加回答
舉報(bào)