private static void FormatSignature(StringBuilder result, MethodBase method)
        {
            ContractUtils.RequiresNotNull(result, "result");
            ContractUtils.RequiresNotNull(method, "method");

            MethodInfo methodInfo = method as MethodInfo;

            if (methodInfo != null)
            {
                FormatTypeName(result, methodInfo.ReturnType);
                result.Append(' ');
            }

            MethodBuilder builder = method as MethodBuilder;

            if (builder != null)
            {
                result.Append(builder.Signature);
                return;
            }

            ConstructorBuilder cb = method as ConstructorBuilder;

            if (cb != null)
            {
                result.Append(cb.Signature);
                return;
            }

            FormatTypeName(result, method.DeclaringType);
            result.Append("::");
            result.Append(method.Name);

            if (!method.IsConstructor)
            {
                FormatTypeArgs(result, method.GetGenericArguments());
            }

            result.Append("(");

            if (!method.ContainsGenericParameters)
            {
                ParameterInfo[] ps = method.GetParameters();
                for (int i = 0; i < ps.Length; i++)
                {
                    if (i > 0)
                    {
                        result.Append(", ");
                    }
                    FormatTypeName(result, ps[i].ParameterType);
                    if (!System.String.IsNullOrEmpty(ps[i].Name))
                    {
                        result.Append(" ");
                        result.Append(ps[i].Name);
                    }
                }
            }
            else
            {
                result.Append("?");
            }

            result.Append(")");
        }