c#比较两个对象模型中的数据

标签 c# serialization comparison

我有一个对话框,当生成它时,它会填充对象模型中的数据。此时数据被复制并存储在“备份”对象模型中。当用户完成更改并单击“确定”关闭对话框时,我需要一种将备份对象模型与实时模型进行比较的快速方法——如果有任何更改,我可以为用户创建一个新的撤消状态。

如果可能的话,我不想为对象模型中的每个类编写比较函数。

如果我序列化两个对象模型并且它们相同但存储在不同的内存位置,它们是否相等?是否存在比较两个序列化对象模型的简单方法?

最佳答案

我没有为散列字符串而烦恼,而是直接的二进制序列化创造了奇迹。当对话框打开时,序列化对象模型。

BinaryFormatter formatter = new BinaryFormatter();
m_backupStream = new MemoryStream();
formatter.Serialize(m_backupStream,m_objectModel);

然后,如果用户使用可用控件(或不使用)添加到对象模型。当对话框关闭时,您可以将原始序列化与新序列化进行比较 - 对我而言,这就是我决定是否需要撤消状态的方式。

BinaryFormatter formatter = new BinaryFormatter();
MemoryStream liveStream = new MemoryStream();
formatter.Serialize(liveStream,m_objectModel);
byte[] streamOneBytes = liveStream.ToArray();
byte[] streamTwoBytes = m_backupStream.ToArray();
if(!CompareArrays(streamOneBytes, streamTwoBytes))
    AddUndoState();

还有比较数组功能,以防万一有人需要它 - 我敢肯定这可能不是比较两个数组的最佳方式。

private bool CompareArrays(byte[] a, byte[] b)
{
    if (a.Length != b.Length)
       return false;

    for (int i = 0; i < a.Length;i++)
    {
       if (a[i] != b[i])
        return false;
    }
    return true;
}

关于c#比较两个对象模型中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4616610/

相关文章:

c# - 正则表达式没有给出预期的输出

c# - 重构 If 语句

c++ - 如何序列化这个类?

类型为 String 或 List<String> 时的 Java JSON 反序列化

javascript - 将一个值与多个值进行比较的最漂亮的方法是什么?

java - Java中有通配符这样的东西吗?

c# - Xamarin Studio iOS 程序集错误

c# - 编辑 WPF 应用程序中的所有标签颜色

java.lang.RuntimeException : Parcelable encountered IOException writing serializable object in Android passing ArrayList object 错误

flutter - Dart Set<E> 如何比较项目?