【问题标题】:How to copy and compare an object instance in C#?如何在 C# 中复制和比较对象实例?
【发布时间】:2011-11-08 14:15:17
【问题描述】:

假设我有一个班级MyClass。然后我有一个此类的实例,例如:

MyClass myobject = ...  

然后我想做两件事:

  1. 将实例复制到另一个对象。
  2. 比较两个实例以检查它们是否相同(相等)。

对此最简单的解决方案是什么?我搜索了互联网并找到了许多解决方案,但没有一个像我预期的那么简单。

【问题讨论】:

标签: c# clone equals


【解决方案1】:

在您的班级中实施IEquatable(t)。您可以在 Equals() 方法中实现自己的比较逻辑。

您可能还想查看ICloneable

【讨论】:

  • ICloneable 不是一个很好的界面有几个原因。您链接到的文章甚至建议您不要使用它。
  • 这就是为什么我说“可能”并将 OP 指向该链接而不是 MSDN :) 界面的全部意义在于实现取决于您。 OP 可以决定如何实现克隆以及他需要记录什么关于他的实现。
【解决方案2】:

将实例复制到另一个对象。

我假设不仅要处理对象引用,还要处理内容。为此,您必须在 MyClass 类中实现 IClonable 接口。

比较两个实例以检查它们是否相同(相等)。

你必须在你的Myclass 类中实现IEquatable 接口。

【讨论】:

  • 在这两种情况下,这是一种方法,而不是唯一的方法。您不必“必须”这样做。
【解决方案3】:

正如其他人指出的相等比较,实现 IEquatable 或只是覆盖 Equals() 和 GetHashCode() 方法。

在 C# 等内存管理语言中,克隆(复制)并不是一个小问题,因为您不能只复制内存。实现 IClonable 是一种可能性,但从客户端的角度来看,您会混淆您是在执行深度克隆还是浅层克隆。

根据我的经验,实现克隆的最简单方法之一是创建一个类可序列化,然后简单地对其进行序列化和反序列化。当然,拥有 Serializable 对象还会为您带来其他好处。

【讨论】:

    猜你喜欢
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 2019-10-12
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多