Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }