缓存查找到层次结构的策略



我查询如下的分层数据源:

repository.LookupValue(IEnumerable<string> ascendants)

其中ascendants是表示要查找的节点的路径的字符串列表。

我想缓存这些查找的结果。我曾设想使用Dictionary<IEnumerable<string>, long>,但是当使用IEnumerable<string>作为字典键时,似乎使用了引用相等性,这对我来说没有好处。

当然可以定义我自己的类型包装IEnumerable<string>并覆盖它.Equals方法,但这似乎很极端。

我是否缺少更简单的缓存问题解决方案?谁能建议?

使用Dictionary,但使用采用IEqualityComparer的构造函数。编写此函数的自定义实现来比较您的升序集合并将其传入。

下面是一个使用内置StructuralComparisons的示例(在本例中比较数组)。

    public class StringArrayComparer : IEqualityComparer<string[]>
    {
        public bool Equals(string[] x, string[] y)
        {
            return StructuralComparisons.StructuralEqualityComparer.Equals(x, y);
        }
        public int GetHashCode(string[] obj)
        {
            return StructuralComparisons.StructuralEqualityComparer.GetHashCode(obj);
        }
    }

最新更新