public override string ToString() { var owner = (!String.IsNullOrWhiteSpace(OwnerTypeAlias) ? $"[{OwnerTypeAlias}]" : String.Empty) + OwnerType?.FoundMatchingType; var accessModifier = AccessModifier != MethodAccessModifier.Unknown ? $"{AccessModifier.GetName()} " : String.Empty; var returnType = ReturnType?.FoundMatchingType?.ToString() ?? ReturnType?.Name; var methodName = (!String.IsNullOrWhiteSpace(MethodNameAlias) ? $"[{MethodNameAlias}]" : String.Empty) + MethodName; var genericArguments = GenericArguments.Any() ? $"<{string.Join(", ", GenericArguments.Select(a => a.FoundMatchingType?.ToString() ?? a.Name))}>" : null; var parameters = ParameterTypes.Select(p => { var str = $"{p.Name}"; if (!String.IsNullOrWhiteSpace(p.GenericName) && p.GenericName != p.Name) { str = $"[{p.GenericName}]{str}"; } return(p.IsOptional ? $"{str}?" : str); }).ToArray(); var parametersStr = parameters.Any() ? $"({string.Join(", ", parameters)})" : null; return(Regex.Replace($"{owner}:{MethodType.GetName()} {accessModifier} {returnType} {methodName}{genericArguments}{parametersStr}".Trim(), @"\s+", " ")); }