public static String GetCSharpDecl(this MethodBase m, ToCSharpOptions opt) { opt = opt ?? ToCSharpOptions.Terse; var buffer = new StringBuilder(); if (opt.EmitAttributes && m.Attrs().IsNotEmpty()) { buffer.Append(m.GetCSharpAttributesClause(opt)).Append(" "); } if (opt.EmitAttributes && m is MethodInfo && (((MethodInfo)m).ReturnParameter).Attrs().IsNotEmpty()) { buffer.Append(((MethodInfo)m).ReturnParameter.GetCSharpAttributesClause(opt)).Append(" "); } if (opt.EmitVisibilityQualifier) { buffer.Append(m.GetCSharpVisibilityQualifier()).Append(" "); } if (opt.EmitStaticQualifier && m.IsStatic) { buffer.Append("static "); } if (!(m is ConstructorInfo)) { buffer.Append(m.Ret().GetCSharpRef(opt)).Append(" "); } if (opt.EmitDeclaringType) { buffer.Append(m.DeclaringType.GetCSharpRef(ToCSharpOptions.Terse) + "::"); } if (!(m is ConstructorInfo)) { buffer.Append(m.Name.Slice(0, m.Name.IndexOf("`") == -1 ? m.Name.Length : m.Name.IndexOf("`"))); } else if (opt.EmitCtorNameAsClassName) { buffer.Append(m.DeclaringType.Name.Slice(0, m.DeclaringType.Name.IndexOf("`") == -1 ? m.DeclaringType.Name.Length : m.DeclaringType.Name.IndexOf("`"))); } else { buffer.Append(m.Name.Slice(0, m.Name.IndexOf("`") == -1 ? m.Name.Length : m.Name.IndexOf("`"))); } if (opt.EmitTypeArgs) { buffer.Append(m.GetCSharpTypeArgsClause(opt)); } buffer.Append("("); m.GetParameters().ForEach((pi, i) => { if (opt.EmitAttributes && pi.Attrs().IsNotEmpty()) { buffer.Append(pi.GetCSharpAttributesClause(opt)).Append(" "); } var mod = ""; if (pi.ParameterType.IsByRef && pi.IsOut) { mod = "out"; } if (pi.ParameterType.IsByRef && !pi.IsOut) { mod = "ref"; } if (mod.IsNotEmpty()) { buffer.Append(mod).Append(" "); } var t_par = pi.ParameterType.IsByRef ? pi.ParameterType.GetElementType() : pi.ParameterType; buffer.Append(t_par.GetCSharpRef(opt)).Append(" "); buffer.Append(pi.Name); if (i != m.GetParameters().Count() - 1) { buffer.Append(", "); } }); buffer.Append(")"); if (opt.EmitTypeArgsConstraints) { buffer.Append(m.GetCSharpTypeConstraintsClause(opt)); } if (opt.EmitSemicolon) { buffer.Append(";"); } return(buffer.ToString()); }