コード例 #1
0
        /// <summary>
        /// Memoizer with one parameter (kept as weak reference), used to perform a lazy-cached evaluation. (see http://en.wikipedia.org/wiki/Memoization)
        /// </summary>
        /// <typeparam name="TParam">The return type to memoize</typeparam>
        /// <param name="func">the function to evaluate</param>
        /// <returns>A memoized value</returns>
        public static Func <TParam, TResult> AsWeakLockedMemoized <TParam, TResult>(this Func <TParam, TResult> func)
            where TParam : class
        {
            var values = new WeakAttachedDictionary <TParam, string>();

            return(v => values.GetValue(v, "value", () => func(v)));
        }