c#将一个Dictionary复制到另一个Dictionary,只要复制值,不要复制地址

问题:我用等号直接Dictionary1=Dictionary2,复制过去的貌似是地址,我就是想把值复制过去 请问怎么实现,不要遍历一个一个复制,我做复制就是为了遍历,因为有个字典是动态的不能用foreach遍历

      static void Main(string[] args)
        {
            Dictionary<string, int> d1 = new Dictionary<string, int>();
            d1.Add("A", 1);
            d1.Add("B", 2);
            //使用构造函数可以实现不用for循环复制
            Dictionary<string, int> d2 = new Dictionary<string, int>(d1);
 
            d2["B"] = 22;//改变d2只影响到d2
            foreach (var kv in d2)
                Console.WriteLine("k={0} v={1}", kv.Key, kv.Value);
            foreach (var kv in d1)
                Console.WriteLine("k={0} v={1}", kv.Key, kv.Value);
            Console.ReadLine();
        }

 

转载于:https://www.cnblogs.com/MATU/p/6893709.html

C#中,复制Dictionary通常有几种方式,取决于你是想要浅拷贝还是深拷贝,以及Dictionary的内容是什么类型的。这里有几个常见的方法: 1. **浅拷贝**(Shallow Copy):如果你只是想复制Dictionary本身而不复制,可以使用LINQ的`ToDictionary()`方法,如下所示: ```csharp Dictionary<TKey, TValue> original = ...; Dictionary<TKey, TValue> shallowCopy = original.ToDictionary(); ``` 这将创建一个新的Dictionary,其中键对是原始Dictionary一个引用。 2. **深拷贝**(Deep Copy):如果你想完全复制Dictionary并获得每个的独立副本,特别是当是复杂类型时,可以先获取的序列,然后逐个复制: ```csharp Dictionary<TKey, TValue> original = ...; var keyValueCollection = original.Select(kvp => new KeyValuePair<TKey, TValue>(kvp.Key, kvp.Value.Clone())).ToList(); Dictionary<TKey, TValue> deepCopy = new Dictionary<TKey, TValue>(keyValueCollection); ``` 这里假设`TValue`实现了`ICloneable`接口或者你可以提供自定义的`Clone()`方法。 3. **针对浅拷贝**:如果只关心浅拷贝,而忽略了键,可以这样做: ```csharp Dictionary<TKey, TValue> original = ...; Dictionary<TValue, TValue> valueOnlyCopy = original.ToDictionary(pair => pair.Value); ``` **相关问题--** 1. C#中如何判断一个Dictionary是否包含浅拷贝? 2. 如果Dictionary是不可克隆的对象怎么办? 3. 使用深拷贝时,如何处理嵌套的Dictionary
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值