如何使用FieldTypeDeclaration (Roslyn)更改字段类型
本文关键字:字段 类型 Roslyn 何使用 FieldTypeDeclaration | 更新日期: 2023-09-27 18:17:21
我使用的是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();
}
newFieldStr
的值为
private System.Windows.Forms.UserControlsomeOtherClass;
请告知我怎样才能得到预期的结果
对于记录,您可以从原始语法节点添加琐事:
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)));