メソッドを IMethod として追加しています。IMethod はメソッドを DOM エンティティとして表し、その署名に関する情報を (コードなしで) 表示するだけです。そのため、そこから C# コードを生成する方法がわかりません。 ...
(メソッドの署名のためだけにコードを生成するつもりでない限り? その場合は、DOM->AST 変換、特にConvertMember(IMethod m, ClassFinder targetContext)
メソッドのクラス ICSharpCode.SharpDevelop.Dom.Refactoring.CodeGenerator を調べる必要があります)。
ただし、 CompilationUnitはコード ファイルの抽象構文ツリーであり、 CSharpOutputVisitorおよび VBNetOutputVisitor クラスを使用して簡単に C#/VB.NET コードに戻すことができます。
メソッドのコードを表す MethodDeclaration を、元のファイルのクラスを表す TypeDefinition に追加し、前述の出力ビジターを使用して、新しいメソッドが挿入されたコードを生成できます。
便宜上、INode をコードに変換する際に役立つ PrettyPrint 拡張メソッドを添付します。
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);
}