【问题标题】:How do I change a field type using FieldTypeDeclaration ( Roslyn )如何使用 FieldTypeDeclaration ( Roslyn ) 更改字段类型
【发布时间】:2015-10-11 17:30:42
【问题描述】:

我正在使用 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;

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

【问题讨论】:

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

标签: c# roslyn roslyn-code-analysis


【解决方案1】:

为了记录,您可以从原始语法节点添加琐事:

var newFieldType = SyntaxFactory.ParseName("System.Windows.Forms.UserControl")
                                .WithTriviaFrom(fieldType);

【讨论】:

    【解决方案2】:

    我会使用这个“单线”来完成所有工作:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多