不同的对象,但相同的值
本文关键字:对象 | 更新日期: 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
中的任何元素时,它也将反映在另一个列表中。