C#字典赋值另一个字典,旧字典变动,新字典也会变
时间: 2024-08-13 11:07:58 浏览: 119
C#中DictionaryTest集合字典的用法
在C#中,当你将一个字典赋值给另一个字典时,通常不会直接创建一个引用关系,而是复制了一个浅拷贝(Dictionary<TKey, TValue>类型是引用类型,但其元素的值是TValue类型,如果是不可变类型或值类型,则会创建深拷贝)。这意味着如果旧字典(source Dictionary)和新字典(destination Dictionary)中的键相同,并且值为可变类型,那么修改其中一个字典的值会影响到另一个字典。
例如:
```csharp
Dictionary<string, List<int>> oldDict = new Dictionary<string, List<int>> { { "key1", new List<int>() } };
Dictionary<string, List<int>> newDict = oldDict; // 创建浅拷贝
// 修改旧字典的值
oldDict["key1"].Add(10);
// 这里newDict也会受到影响,因为它引用的是同一个列表
Console.WriteLine(newDict["key1"]); // 输出: [0, 10]
```
如果你想要保持独立的副本,可以使用`Dictionary<TKey, TValue>.CopyTo()`方法,或者对值进行深拷贝操作,例如:
```csharp
List<int> deepCopy = oldDict["key1"].ToList(); // 深度复制
newDict["key1"] = deepCopy; // 现在修改新的不会影响到旧的
```
阅读全文