C# 如何使用FieldTypeDeclaration(Roslyn)更改字段类型

C# 如何使用FieldTypeDeclaration(Roslyn)更改字段类型,c#,roslyn,roslyn-code-analysis,C#,Roslyn,Roslyn Code Analysis,我正在使用visual studio项目类型-独立代码分析工具。我正在使用以下代码,但是ToString()显示了意外的结果 static void Main(string[] args) { var classDoc = @"public class SomeClass{ private SomeOtherClass someOtherClass; }"; SyntaxTree classTree=SyntaxFactory.Parse

我正在使用visual studio项目类型-独立代码分析工具。我正在使用以下代码,但是ToString()显示了意外的结果

static void Main(string[] args)
{
    var classDoc = @"public class SomeClass{
            private SomeOtherClass someOtherClass;
        }";

    SyntaxTree classTree=SyntaxFactory.ParseSyntaxTree(classDoc);
    var classDecl = (ClassDeclarationSyntax)classTree.GetRoot().DescendantNodes()
        .First(d => d is ClassDeclarationSyntax);

    var field = classDecl.Members.OfType<FieldDeclarationSyntax>().First();
    var fieldType = field.Declaration.Type;
    var newFieldType = SyntaxFactory.ParseName("System.Windows.Forms.UserControl");
    var newField=field.ReplaceNode(fieldType, newFieldType);
    var newFieldStr = newField.ToString();
}

请告知我如何获得预期结果。

对于记录,您只需添加原始语法节点中的琐事:

static void Main(string[] args)
{
    var classDoc = @"public class SomeClass{
            private SomeOtherClass someOtherClass;
        }";

    SyntaxTree classTree=SyntaxFactory.ParseSyntaxTree(classDoc);
    var classDecl = (ClassDeclarationSyntax)classTree.GetRoot().DescendantNodes()
        .First(d => d is ClassDeclarationSyntax);

    var field = classDecl.Members.OfType<FieldDeclarationSyntax>().First();
    var fieldType = field.Declaration.Type;
    var newFieldType = SyntaxFactory.ParseName("System.Windows.Forms.UserControl");
    var newField=field.ReplaceNode(fieldType, newFieldType);
    var newFieldStr = newField.ToString();
}
var newFieldType = SyntaxFactory.ParseName("System.Windows.Forms.UserControl")
                                .WithTriviaFrom(fieldType);
我会用这个“一行”来做所有的工作:

var newField = field.WithDeclaration(
                    field.Declaration.WithType(
                            SyntaxFactory.ParseName("System.Windows.Forms.UserControl")
                                         .WithTriviaFrom(field.Declaration.Type)));

我认为您只需要保留旧节点的琐事或运行格式化程序。非常感谢。我不认为我必须处理琐事,我认为在工作区中更改文档的语法树会为我创建空间。