c# - Arraylist 在从磁盘加载后无法比较对象

标签 c# arraylist

为了简单起见,假设我有一个 arraylist allBooks 包含类“books”和一个 arraylist someBooks 包含一些但不是所有的“books”。

当我想查看一个数组列表中的一本书是否也包含在另一个数组列表中时,使用 contains() 方法效果很好。

问题是,当我将两个 Arraylists 保存到 .bin 文件并在程序重新启动后将它们加载回来时,这不再有效。进行与之前相同的测试,即使比较的对象相同(内部信息相同),contains() 也会返回 false。

我通过重载 equals 方法解决了它并且它工作正常,但我想知道为什么会这样?

最佳答案

您将必须提供自己的哈希码和 equals 实现。默认情况下,它将简单地使用指针相等性,这在对象被“克隆”(序列化/反序列化循环)后显然会失败。

关于c# - Arraylist 在从磁盘加载后无法比较对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2711401/

相关文章:

c# - 改进我的代码以循环遍历 1000 个 csv 文件并更快地导入数百万条记录?

java - 类转换异常 : ArrayList cannot be cast to

java - 要点列表+构造函数和方法问题

java - 为什么最后一个对象在 ArrayList 中被复制多次?

Java Collection-ArrayList 和 Vector 之间的加速

c# - 使用 ASP.NET MVC 和 Access 的 Intranet 表单

c# - 我怎样才能将 HTTP 响应发送回用户,但之后仍然在服务器上做更多的事情?

c# - 循环依赖的依赖注入(inject)

c# - 使用 Json.net 反序列化混合类型列表

java - 在内部存储中保存自定义对象的 ArrayList