您正在将该方法添加为 IMethod - IMethod 仅将方法表示为 DOM 实体以及有关其签名的一些信息(没有任何代码) - 所以我看不出您将如何从中生成 C# 代码...
(除非您的意思是仅为方法的签名生成代码?在这种情况下,您应该查看 ICSharpCode.SharpDevelop.Dom.Refactoring.CodeGenerator 类以进行 DOM->AST 转换,特别是ConvertMember(IMethod m, ClassFinder targetContext)
方法)。
然而,您的CompilationUnit是代码文件的抽象语法树,可以使用 CSharpOutputVisitor 和 VBNetOutputVisitor 类轻松转换回 C#/VB.NET 代码。
您可以将表示方法代码的 MethodDeclaration 添加到表示原始文件中某个类的 TypeDefinition 中,然后使用上述输出访问者生成插入新方法的代码。
为了您的方便,我附上了一个 PrettyPrint 扩展方法,在将 INode 转换为代码时很有用:
public static string PrettyPrint(this INode code, LanguageProperties language)
{
if (code == null) return string.Empty;
IOutputAstVisitor csOutVisitor = CreateCodePrinter(language);
code.AcceptVisitor(csOutVisitor, null);
return csOutVisitor.Text;
}
private static IOutputAstVisitor CreateCodePrinter(LanguageProperties language)
{
if (language == LanguageProperties.CSharp) return new CSharpOutputVisitor();
if (language == LanguageProperties.VBNet) return new VBNetOutputVisitor();
throw new NotSupportedException();
}
public static string ToCSharpCode(this INode code)
{
return code.PrettyPrint(LanguageProperties.CSharp);
}