我想爲我的對象和表達式創建一個緩存。用下面的代碼,他運行了所有元素,之後他可以使用詞典中的表達式/對象。而不是這樣做,他再次將成員表達式添加到具有相同對象的字典中。使用membrerepression創建字典作爲密鑰
是否有可能創建一個帶有成員表達式的字典,我在這裏做錯了什麼?
private static readonly IDictionary<MemberExpression, object> Cache = new Dictionary<MemberExpression, object>();
private static Func<TClass, TProperty> GetCachedMemberFunction<TClass, TProperty>(
Expression<Func<TClass, TProperty>> member)
{
Func<TClass, TProperty> func;
var memberExpression = member.Body as MemberExpression;
if (Cache.ContainsKey(memberExpression))
{
func = (Func<TClass, TProperty>)Cache[memberExpression];
}
else
{
func = member.Compile();
Cache[memberExpression] = func;
}
return func;
}
注意:正如你從代碼中看到的,我想創建一個緩存,所以我只需要一次編譯功能。
我在猜測MemberExpression是一個引用類型,沒有實現所需的IEquatable接口。我認爲CLR會爲你編譯表達式。 – 2014-09-10 12:24:08
[最有效的方式來測試lambda表達式的相等]可能的重複(http://stackoverflow.com/questions/283537/most-efficient-way-to-test-equality-of-lambda-expressions) – Athari 2014-09-10 12:24:43