private static string GetMethodArgumentInformation(MethodBase method, Assembly containingAssembly) { var info = new StringBuilder(); info.Append("("); var num = 0; var argumentTypes = method.GetParameterTypes(); if(argumentTypes.Length > 0) { var list = new List<string>(); var methodParameterDeclarationNames = method.GetGenericParameterDeclarationNames(); foreach(var type in argumentTypes) { var arguments = new List<string>(); var elementType = type.GetRootElementType(); if(elementType.IsGenericParameter) { if(methodParameterDeclarationNames.Contains(elementType.Name)) { arguments.Add("!!" + type.Name); } else { arguments.Add("!" + type.Name); } } else { arguments.Add(new TypeDescriptor(type, containingAssembly).Value); } arguments.Add("V_" + num.ToString(CultureInfo.CurrentCulture)); list.Add(string.Join(" ", arguments.ToArray())); num++; } info.Append(string.Join(", ", list.ToArray())); } info.Append(")"); return info.ToString(); }