我查询如下的分层数据源:
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);
}
}