亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

克隆/深度復制.NET泛型字典<string,T>的最佳方法是什么?

克隆/深度復制.NET泛型字典<string,T>的最佳方法是什么?

C#
瀟瀟雨雨 2019-09-02 10:12:34
我有一個通用字典Dictionary<string, T>,我想基本上做一個克?。ǎ┑娜魏谓ㄗh。
查看完整描述

3 回答

?
慕姐8265434

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()適當的深度克隆。


查看完整回答
反對 回復 2019-09-02
?
元芳怎么了

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());

(這些是未經測試的,但應該有效。)


查看完整回答
反對 回復 2019-09-02
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

Dictionary<string, int> dictionary = new Dictionary<string, int>();


Dictionary<string, int> copy = new Dictionary<string, int>(dictionary);


查看完整回答
反對 回復 2019-09-02
  • 3 回答
  • 0 關注
  • 777 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號