1. C# / Говнокод #24899

    −1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    private static readonly ConcurrentDictionary<Expression, object> CachedFunctions;
    
    public static Func<TEntity, bool> AsFunc<TEntity>(this object entity, Expression<Func<TEntity, bool>> expr)
        where TEntity : class, IEntity
    {
        //@see http://sergeyteplyakov.blogspot.ru/2015/06/lazy-trick-with-concurrentdictionary.html
        return (Func<TEntity, bool>)CachedFunctions.GetOrAdd(expr, id => new Lazy<object>(
            () => CachedFunctions.GetOrAdd(id, expr.Compile())));
    }

    Вот так хорошая идея ломается о кривую реализацию. Вместо того чтобы сохранить в кэш требуемый тип, сохраняем туда Lazy, возвращающий себя же :)

    Запостил: leff, 11 Октября 2018

    Комментарии (4) RSS

    Добавить комментарий