2012-09-12 14 views
8

ClassDeclarationSyntax.AddMembers yöntemini kullanarak bir sınıfa özel alanlar ekliyorum. Alanlar sınıfta görünür, ancak alanları belirli konumlara nasıl ekleyeceğinizi bilmek isterim. Şu andan itibaren, kodun oluşturulduğu sırada doğruyu değerlendiren #if yönergesi içinde sınıfın sonuna eklenirler.Sınıf üyelerini Roslyn kullanarak belirli konumlara ekleme?

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()); 

bu neden olacaktır:

kod çalıştırma

public class A 
{ 
#if !SILVERLIGHT 
    public int someField; 
    private string myAddedField; 
#endif 
} 

Ve bu sonucu elde etmek istiyorum:

public class A 
{ 
    private string myAddedField; 
#if !SILVERLIGHT 
    public int someField; 
#endif 
} 
+1

Tanımladığınız davranışı göremiyorum. Bu sorunun ortaya çıktığı bir örnek gösterebilir misiniz? – svick

+0

Üzgünüz, sorumu düzeltin ve örnek kod ekledim. – illodin

cevap

7

Bunu yapmak için şunlara sahip olacak Yeni üyeyi tam olarak nereye yerleştirmek istediğinizi bulmak ve ardından sınıf üyelerinin listesini buna göre değiştirmek. Şunlar gibi: