Ich füge private Felder in eine Klasse mit ClassDeclarationSyntax.AddMembers Methode. Felder erscheinen in der Klasse, aber ich würde gerne wissen, wie Sie die Felder an bestimmten Orten hinzufügen können. Ab sofort werden sie am Ende der Klasse innerhalb der #if -Direktive hinzugefügt, die zum Zeitpunkt der Codegenerierung als wahr ausgewertet wird.Hinzufügen von Klassenmitgliedern an bestimmten Orten mit Roslyn?
Ausführen des Code:
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());
in dieser Folge wird:
public class A
{
#if !SILVERLIGHT
public int someField;
private string myAddedField;
#endif
}
Und ich möchte dieses Ergebnis erhalten:
public class A
{
private string myAddedField;
#if !SILVERLIGHT
public int someField;
#endif
}
Ich sehe nicht das Verhalten, das Sie beschreiben. Können Sie uns ein Beispiel zeigen, wo dieses Problem auftaucht? – svick
Entschuldigung, habe meine Frage korrigiert und Beispielcode hinzugefügt. – illodin