0

次のように、階層データ ソースに対してクエリを実行します。

repository.LookupValue(IEnumerable<string> ascendants)

ascendants検索されるノードへのパスを表す文字列のリストです。

これらのルックアップの結果をキャッシュしたいと思います。を使うことを想定していたのですが、 を辞書のキーとしてDictionary<IEnumerable<string>, long>使うIEnumerable<string>と参照等価性が使われるようで、どうも苦手です。

もちろん、独自の型ラッピングIEnumerable<string>を定義してそのメソッドをオーバーライドすることもできます.Equalsが、それは極端に思えます。

キャッシュの問題に対するより簡単な解決策がありませんか? 誰でもアドバイスできますか?

4

1 に答える 1

2

a を使用し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);
        }
    }
于 2012-09-24T14:12:28.107 に答える