Dodaję prywatne pola do klasy przy użyciu metody ClassDeclarationSyntax.AddMembers. Pola pojawiają się w klasie, ale chciałbym wiedzieć, jak dodać pola do określonych lokalizacji. Na razie są one dodawane na końcu klasy wewnątrz dyrektywy #if, która ma wartość true w momencie generowania kodu.Dodawanie członków klasy do konkretnych lokalizacji za pomocą Roslyn?
Uruchamianie kodu:
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());
spowoduje to:
public class A
{
#if !SILVERLIGHT
public int someField;
private string myAddedField;
#endif
}
I chciałbym, aby uzyskać ten wynik:
public class A
{
private string myAddedField;
#if !SILVERLIGHT
public int someField;
#endif
}
Nie widzę zachowania, które opisujesz. Czy możesz pokazać nam przykład, w którym pojawia się ten problem? – svick
Przepraszamy, poprawiono moje pytanie i dodałem przykładowy kod. – illodin