When 3 != 3 in c# Visual Studio
本问题已经有最佳答案,请猛点这里访问。
上面是Visual Studio 2015在调试某些C代码时的部分屏幕截图。cachedlist[2][uniquecolumn.name]是一个int,它的值是3,值也是一个in,它的值也是3,但是当我比较这两个值时,得到了错误的结果。怎么会这样?
这是因为整数被装箱("包装"在对象中),而对象的比较是通过引用进行比较的:它们是内存中的同一对象吗,回答:否。
如果您希望按值比较它们,并且您知道它们始终都是
1 | var isEqual = (int)CachedList[2][uniqueColumn.Name] == (int)value; |
(参见.NET小提琴:https://dotnetfiddle.net/z3lwbg)
如果两个对象中的类型不总是
1 | var isEqual = CachedList[2][uniqueColumn.Name].Equals(value); |
注意,这可能仍然不能总是给出所需的结果。如果一个是盒装的