代码之家  ›  专栏  ›  技术社区  ›  Felipe Pessoto

用表达式缓存包装

  •  1
  • Felipe Pessoto  · 技术社区  · 14 年前

    我不知道是否可行。

    我想要一个类来封装我的站点的所有缓存。我在想最好的方法来避免和钥匙冲突。

    我的第一个想法是这样的:

        public static TResult Cachear<TResult>(this Cache cache, Expression<Func<TResult>> funcao)
        {
            string chave = funcao.ToString();
    
            if (!(cache[chave] is TResult))
            {
                cache[chave] = funcao.Compile()();
            }
    
            return (TResult)cache[chave];
        }
    

    是最好的方法吗?TY

    2 回复  |  直到 11 年前
        1
  •  1
  •   leppie    14 年前

    Expression.ToString() 相当贵。

    另一个问题是 Expression s始终是新创建的对象,因此它们永远不会具有相同的引用,因此将其用作键是有问题的。

    最后一个问题(还不影响您)是考虑所有可能的参数组合。

    我唯一能建议的就是忘记 表情 只需使用 Func<R> 直接。