不同的对象但价值相同?

时间:2016-01-27 13:30:00

标签: c# entity-framework object

当我尝试更改值时出现问题。

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获取RefLanguage记录。

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

3 个答案:

答案 0 :(得分:3)

List<RefLanguage> languages2 = languages1;行将languages1的引用指向与languages2相同的内存。然后.Equals方法将比较两个引用,在这种情况下是相同的。

您可以做的比较是

bool isSame = languages1.SequenceEqual(languages2);

答案 1 :(得分:1)

.Equals method用于检查参考。在你的情况下,当你说

languages1

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

答案 2 :(得分:0)

当您将vector<unsigned char> dec2bin( const string& _hex ) { vector<unsigned char> ret; if( _hex.size() < 2 ) { return ret; } for( size_t i = 0; i <= _hex.size() - 2; i += 2 ) { string two = string( _hex.data() + i, 2 ); stringstream ss( two ); string ttt = ss.str(); int tmp; ss >> /*hex >>*/ tmp; unsigned char c = (unsigned char)tmp; ret.insert( ret.end(), c ); } return ret; } int main() { string a = "65"; unsigned char c = dec2bin( a )[0]; cout << (char)c << endl; return 0; } 分配给languages2时,您在两个不同的变量下引用相同的列表,您的where语句不会更改任何内容,因为它只是创建一个新的数据结构(迭代器) )。

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

languages1

但是两个列表中的元素仍然相同,因此当您修改var languages2 = languages1.Where(...).ToList(). 中的任何元素时,它也会反映在另一个列表中。