gpt4 book ai didi

c# - 判断对象是否被修改的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-30 12:19:21 25 4
gpt4 key购买 nike

我有一个对象作为序列化的 base-64 字符串映射到 cookie。如果对存储在服务器端 cookie 中的对象进行了更改,我只想写出一个新的 cookie。

我想做的是当对象从 cookie 中提取/初始化时获取哈希码,并将原始哈希码与在我将 cookie header 发送给客户端之前存在的哈希码进行比较,以确保我没有除非进行更改,否则必须重新序列化/发送 cookie。

我打算覆盖 .NET 的 Object.GetHashCode() 方法,但我不确定这是检查对象是否被修改的最佳方法。

是否有任何其他方法可以检查对象是否被修改,或者我是否应该覆盖 GetHashCode() 方法。

更新 我决定接受@rmbarnes 的回答,因为它有一个有趣的问题解决方案,并且因为我决定在他的帖子末尾使用他的建议而不检查修改。但是,我仍然有兴趣听听任何人对我的情况可能有的任何其他解决方案。

最佳答案

GetHashCode() 应始终与 Equals() 同步,并且 Equals() 不一定保证检查对象中的所有字段(在某些情况下您希望事实并非如此)。

此外,GetHashCode() 不能保证为所有可能的对象状态返回唯一值。可以想象(尽管不太可能)两个对象状态可能会产生相同的 HashCode(毕竟,它确实只有一个 int 值的可能状态;有关更多详细信息,请参阅 the Pigeonhole Principle)。

如果您可以确保 Equals() 检查所有适当的字段,那么您可以克隆该对象以记录其状态,然后使用 Equals() 对照新状态检查它是否已更改。

顺便说一句:您提到的连载给了我一个想法。您可以序列化对象,记录它,然后当您检查对象更改时,重复该过程并比较序列化的值。这样您就可以检查状态更改,而无需对对象进行任何代码更改。但是,这不是一个很好的解决方案,因为:

  1. 可能效率很低
  2. 对象容易发生序列化变化;您可能会在对象状态更改时得到误报。

关于c# - 判断对象是否被修改的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com