/// <summary>Get whether a method definition matches the signature expected by a method reference.</summary> /// <param name="definition">The method definition.</param> /// <param name="reference">The method reference.</param> public static bool HasMatchingSignature(MethodDefinition definition, MethodReference reference) { // // duplicated by HasMatchingSignature(MethodInfo, MethodReference) above // // same name if (definition.Name != reference.Name) { return(false); } // same arguments ParameterDefinition[] definitionParameters = definition.Parameters.ToArray(); ParameterDefinition[] referenceParameters = reference.Parameters.ToArray(); if (referenceParameters.Length != definitionParameters.Length) { return(false); } for (int i = 0; i < referenceParameters.Length; i++) { if (!RewriteHelper.IsSameType(definitionParameters[i].ParameterType, referenceParameters[i].ParameterType)) { return(false); } } return(true); }
/// <summary>Get whether a type matches a type reference.</summary> /// <param name="type">The defined type.</param> /// <param name="reference">The type reference.</param> public static bool IsSameType(Type type, TypeReference reference) { // // duplicated by IsSameType(TypeReference, TypeReference) below // // same namespace & name if (type.Namespace != reference.Namespace || type.Name != reference.Name) { return(false); } // same generic parameters if (type.IsGenericType) { if (!reference.IsGenericInstance) { return(false); } Type[] defGenerics = type.GetGenericArguments(); TypeReference[] refGenerics = ((GenericInstanceType)reference).GenericArguments.ToArray(); if (defGenerics.Length != refGenerics.Length) { return(false); } for (int i = 0; i < defGenerics.Length; i++) { if (!RewriteHelper.IsSameType(defGenerics[i], refGenerics[i])) { return(false); } } } return(true); }