8
ClassDeclarationSyntax.AddMembersメソッドを使用してプライベートフィールドをクラスに追加しています。フィールドはクラスに表示されますが、フィールドを特定の場所に追加する方法を知りたいと思います。現時点では#ifディレクティブ内のクラスの終わりに追加され、コード生成の実行時にtrueと評価されます。Roslynを使用してクラスメンバーを特定の場所に追加しますか?
var tree = SyntaxTree.ParseCompilationUnit(@"
namespace Test
{
public class A
{
#if !SILVERLIGHT
public int someField;
#endif
}
}");
var field =
Syntax.FieldDeclaration(
Syntax.VariableDeclaration(
Syntax.PredefinedType(
Syntax.Token(
SyntaxKind.StringKeyword))))
.WithModifiers(Syntax.Token(SyntaxKind.PrivateKeyword))
.AddDeclarationVariables(Syntax.VariableDeclarator("myAddedField"));
var theClass = tree.GetRoot().DescendantNodes()
.OfType<ClassDeclarationSyntax>().First();
theClass = theClass.AddMembers(field).NormalizeWhitespace();
System.Diagnostics.Debug.Write(theClass.GetFullText());
は、このになります:
コード実行
public class A
{
#if !SILVERLIGHT
public int someField;
private string myAddedField;
#endif
}
をそして、私はこの結果を取得したいと思います:
public class A
{
private string myAddedField;
#if !SILVERLIGHT
public int someField;
#endif
}
あなたの行動は表示されません。この問題が発生した場所のサンプルを表示できますか? – svick
申し訳ありませんが、私の質問が修正され、サンプルコードが追加されました。 – illodin