C# 引用类型的引用丢失问题
最近遇到一个问题:
我定义了一个引用类型的变量A=B,B的变更的时候,A不会变更,我需要重新让A等于B。
感觉和平常使用的引用变量不太一样,很少遇到我需要主动去更新的情况。
我以为引用会像魔法一样自动更新😄
先看代码:
using System; using System.Collections.Generic; namespace ReferenceType { // 数据源 public class StudentData { public int id; public string name; } public class StudentModel { private Dictionary<int, StudentData> m_studentDataDic = new(); public void UpdateStudentData(StudentData studentData) { m_studentDataDic[studentData.id] = studentData; } public StudentData GetStudentData(int studentId) { return m_studentDataDic.GetValueOrDefault(studentId); } } public class Test { private StudentModel m_studentModel; private void InitData() { m_studentModel = new StudentModel(); m_studentModel.UpdateStudentData(new StudentData() { id = 1, name = "Job" }); } // 假设Run是程序执行入口 public void Run() { InitData(); var student01 = m_studentModel.GetStudentData(1); if (student01 == null) { Console.WriteLine("学生01数据为空"); return; } Console.WriteLine($"学生01的名字是:{student01.name}"); m_studentModel.UpdateStudentData(new StudentData() { id = 1, name = "Ming" }); Console.WriteLine($"学生01的名字是:{student01.name}"); Console.WriteLine($"学生01的名字是:{m_studentModel.GetStudentData(1)?.name}"); } } }
输出结果:
学生01的名字是:Job
学生01的名字是:Job
学生01的名字是:Ming
student01复制的是内存地址,
当执行UpdateStudentData,m_studentModel[1]数据会指向新的内存数据,
这个时候student0指向的还是旧的地址。
引用类型保证的是:
修改同一个对象的内部数据,所有引用都能看到变化
引用类型不保证:
变量/容器指向不同的对象后,原来的引用会自动跟随

浙公网安备 33010602011771号