0

我查询这样的分层数据源:

repository.LookupValue(IEnumerable<string> ascendants)

whereascendants是一个字符串列表,表示正在查找的节点的路径。

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

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

我错过了一个更简单的缓存问题解决方案吗?任何人都可以建议吗?

4

1 回答 1

2

使用 aDictionary但使用接受 a 的构造函数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);
        }
    }
于 2012-09-24T14:12:28.107 回答