示例#1
0
        static MethodReference CreateGenericInstanceCandidate(Inflater.GenericContext context, TypeDefinition candidateType, MethodDefinition interfaceMethod)
        {
            var methodReference = new MethodReference(interfaceMethod.Name, interfaceMethod.ReturnType, candidateType)
            {
                HasThis = interfaceMethod.HasThis
            };

            foreach (var genericMethodParameter in interfaceMethod.GenericParameters)
            {
                methodReference.GenericParameters.Add(new GenericParameter(genericMethodParameter.Name, methodReference));
            }

            if (interfaceMethod.ReturnType.IsGenericParameter || interfaceMethod.ReturnType.IsGenericInstance)
            {
                methodReference.ReturnType = Inflater.InflateType(context, interfaceMethod.ReturnType);
            }

            foreach (var p in interfaceMethod.Parameters)
            {
                var parameterType = p.ParameterType;
                if (parameterType.IsGenericParameter || parameterType.IsGenericInstance)
                {
                    parameterType = Inflater.InflateType(context, parameterType);
                }

                methodReference.Parameters.Add(new ParameterDefinition(p.Name, p.Attributes, parameterType));
            }

            return(methodReference);
        }