不同的对象,但相同的值

本文关键字:对象 | 更新日期: 2023-09-27 18:32:17

当我尝试更改值时遇到问题。

List<RefLanguage> languages1 = _refLanguageService.GetAll();
List<RefLanguage> languages2 = languages1;
languages1.Where(x => x.Id == 1).ToList().ForEach(x => x.Name = "Turkish");
Boolean isSame = languages1.Equals(languages2);

第一行是使用 EF 获取引用语言记录。

当我执行代码时,isSame 对象的值为 TRUE。

不同的对象,但相同的值

List<RefLanguage> languages2 = languages1;行将languages1的引用指向与languages2相同的内存。然后,.Equals方法将比较两个引用,在本例中它们是相同的。

相反,您可以做的比较是

bool isSame = languages1.SequenceEqual(languages2);

.等于方法用于检查引用。在您的情况下,当您说

List<RefLanguage> languages2 = languages1;

您正在使引用相等或指向相同的内存,因此结果为真。

当你在

两个不同的变量下引用同一个列表languages1 languages2赋值时,你的where语句不会改变任何内容,因为where只是创建一个新的数据结构(迭代器)。

您实际上要做的是通过以下方式基于前者创建新列表:

var languages2 = languages1.Where(...).ToList().

但是,两个列表中的元素仍然相同,因此当您修改languages1中的任何元素时,它也将反映在另一个列表中。