私は2つの述部の平等を決定しようとしている:C#の述語パラメータ内の値を調べる方法は? - 決定述語の平等
public T FirstOrDefault(Func<T, bool> predicate)
{
if (EntityCache.ContainsKey(predicate.GetHashCode()))
return EntityCache[predicate.GetHashCode()];
else
{
var entity = _objectSet.FirstOrDefault<T>(predicate);
EntityCache.Add(predicate.GetHashCode(), entity);
return entity;
}
}
私がいる問題は、その中に使用される値を考慮していない述語のハッシュコードであり、私はそれらを取得する方法についてはわかりません。
たとえば、上記のメソッドに渡された述語は、(r => r.Id == id)私のFirstOrDefaultメソッド内で 'id'の値を見つける方法は?
を使用する方が良いだろうことに注意して維持されますに? 'Func'を取り上げる構文の全体は、どのように実装されているか分かりません。メソッドの* user *がどのように結果をフィルタリングするかを知ることは、FirstOrDefaultの* implementor *としてあなた次第ではありません。彼らは 'Id'プロパティを使うことを選ぶかもしれませんし、まったく異なる述語を持つかもしれません。値が分かれば、 'Func 'を取り込み、それらがpkを返すと仮定し、述語を呼び出して 'T'の現在のインスタンスの値を得ることができます。 –
私は、述語を渡す柔軟性を保ちたいし、何らかの形でその述語と値のセットが前に渡されたものと同じかどうかを判断できるので、これを行う簡単な方法はないと思います。 – BrooklynDev