Example #1
0
        /// <summary>
        /// Invokes generic method
        /// </summary>
        /// <param name="instance">Object to invoke generic method on</param>
        /// <param name="typeList">Generic parameter list</param>
        /// <param name="parameters">Method parameters</param>
        public object Invoke(object instance, GenericParameterList typeList, params object[] parameters)
        {
            if (!GenericMethodCache.ContainsKey(typeList))
            {
                lock (GenericMethodCache)
                {
                    if (!GenericMethodCache.ContainsKey(typeList))
                    {
                        GenericMethodCache[typeList] = GenericMethod.MakeGenericMethod(typeList.Types);
                    }
                }
            }

            var method = GenericMethodCache[typeList];

            return(method.FastInvoke(instance, parameters));
        }