public override bool Equals(object obj) { MethodCacheKey key = obj as MethodCacheKey; if (key != null && key.TypeName == this.TypeName && key.MethodName == this.MethodName && ArrayEquals(key.ParamTypes, this.ParamTypes)) { return(true); } return(false); }
private static DynamicMethodHandle GetCachedMethod(object obj, MethodInfo info, params object[] parameters) { var key = new MethodCacheKey(obj.GetType().FullName, info.Name, GetParameterTypes(parameters)); DynamicMethodHandle mh = null; if (!_methodCache.TryGetValue(key, out mh)) { lock (_methodCache) { if (!_methodCache.TryGetValue(key, out mh)) { mh = new DynamicMethodHandle(info, parameters); _methodCache.Add(key, mh); } } } return mh; }
private static DynamicMethodHandle GetCachedMethod(object obj, MethodInfo info, params object[] parameters) { var key = new MethodCacheKey(obj.GetType().FullName, info.Name, GetParameterTypes(parameters)); DynamicMethodHandle mh = null; if (!_methodCache.TryGetValue(key, out mh)) { lock (_methodCache) { if (!_methodCache.TryGetValue(key, out mh)) { mh = new DynamicMethodHandle(info, parameters); _methodCache.Add(key, mh); } } } return(mh); }