You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中Dictionary的引用机制是怎样的?为何赋值未生成副本?

问题解答

对,变量b获取的确实是a的引用,而非副本。

在C#中,Dictionary<TKey, TValue>属于引用类型,这类类型的变量本身并不存储对象的实际数据,而是存储对象在托管堆中的内存地址。当执行var b = a;这行代码时,只是把a中保存的内存地址复制给了b,此时a和b指向的是同一个Dictionary实例。

所以后续通过b调用Add方法添加元素,本质上是在操作同一个字典对象,a.Count和b.Count自然会同步变化,最终输出的三个3也验证了这一点——不管是通过a、b还是cnt属性读取,都是同一个字典的元素数量。

测试代码

public class Test{
    public Dictionary<int, int> a = new Dictionary<int, int>();
    public int cnt => a.Count;
    public void Fn()
    {
        var b = a;
        b.Add(1, 2);
        b.Add(2, 2);
        b.Add(3, 2);
        Console.WriteLine(a.Count);
        Console.WriteLine(b.Count);
    }
}
public class Program{
    public static void Main()
    {
        Test test=new Test();
        test.Fn();
        Console.WriteLine(test.cnt);
    }
}

内容的提问来源于stack exchange,提问作者Game_dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 22:16:58