示例#1
0
        public static string GetIdValue(MethodReference methodDefinition)
        {
            var spaceIndex             = methodDefinition.FullName.IndexOf(" ", StringComparison.Ordinal);
            var signature              = methodDefinition.FullName.Substring(spaceIndex + 1);
            var genericTypeMarkerIndex = signature.IndexOf("`", StringComparison.Ordinal);

            if (genericTypeMarkerIndex > -1) // is a method of a generic type and needs special logic
            {
                var twoDotsIndex = signature.IndexOf("::", StringComparison.Ordinal);
                if (twoDotsIndex < genericTypeMarkerIndex)
                {
                    return(signature);
                }

                // extra generic types of method name
                if (signature.IndexOf("!") > -1)
                {
                    try
                    {
                        var genericTypes = TypeService.GetGenericTypeParametersFromMethodName(methodDefinition.FullName);
                        signature = TypeService.ReplaceGenericPlaceholders(signature, genericTypes);

                        var fullNameWithGenTypes = signature.Substring(0, genericTypeMarkerIndex + 2) + signature.Substring(twoDotsIndex);
                        return(fullNameWithGenTypes);
                    }
                    catch (Exception ex)
                    {
                    }
                }

                var fullName = signature.Substring(0, genericTypeMarkerIndex + 2) + signature.Substring(twoDotsIndex);
                return(fullName);
            }
            else if (methodDefinition.CallingConvention == MethodCallingConvention.Generic) // generic method
            {
                var genericTypes  = TypeService.GetGenericMethodParameters(methodDefinition.FullName);
                var elementMethod = methodDefinition.GetElementMethod().FullName;
                elementMethod = TypeService.ReplaceGenericPlaceholders(elementMethod, genericTypes);
                spaceIndex    = elementMethod.IndexOf(" ", StringComparison.Ordinal);
                signature     = elementMethod.Substring(spaceIndex + 1);
            }

            return(signature);
        }