作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为 JObjects
实现缓存。
令我惊讶的是他们没有覆盖 GetHashCode
方法,因此我不能将它用作唯一键。
由于我的 json 非常大,我不想使用 JObject.ToString().GetHashCode
作为解决方案。
我确实看到他们有一个名为 GetDeepHashCode
的内部方法,但实现是基于其他 protected 属性,因此,我无法“复制”代码并从中创建扩展方法。
我也不想使用反射并调用内部的 GetDeepHashCode
方法。
我正在寻找一种方法来为 JObject
创建一个唯一的缓存键,我不希望该方法在性能方面过于昂贵。
最佳答案
您可以使用 JTokenEqualityComparer.GetHashCode(JToken token)
以此目的。它提供对 GetDeepHashCode()
的访问你看到的方法。
var obj = JToken.Parse(jsonString);
var comparer = new JTokenEqualityComparer();
var hashCode = comparer.GetHashCode(obj);
请注意 JTokenEqualityComparer.Equals(JToken x, JToken y)
电话 JToken.DeepEquals()
( source ) 所以这个比较器适合用作 IEqualityComparer<JToken>
在构造 LINQ-to-JSON 对象的哈希表或字典时需要值的唯一性。
关于c# - 如何为 JObject 创建唯一的哈希码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39507095/
我是一名优秀的程序员,十分优秀!