加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用Roslyn如何使用指令更新类?

发布时间:2020-12-15 06:24:35 所属栏目:百科 来源:网络整理
导读:刚刚发现罗斯林,请耐心等待. 我想更新我的类顶部的using指令以包含一个额外的语句,例如: using System;public class Foo {} 应该成为: using System;using Custom.Bar;public class Foo {} 我看到我可以覆盖SyntaxRewriter,我已经这样做来解决方法级代码,
刚刚发现罗斯林,请耐心等待.

我想更新我的类顶部的using指令以包含一个额外的语句,例如:

using System;

public class Foo {

}

应该成为:

using System;
using Custom.Bar;

public class Foo {

}

我看到我可以覆盖SyntaxRewriter,我已经这样做来解决方法级代码,但是我看不到可能让我访问这些using指令的覆盖?

谢谢.

编辑:

我找到了这个属性,但我不知道如何修改它.

var tree = document.GetSyntaxTree().GetRoot() as SyntaxNode;

var compilationUnitSyntax = (CompilationUnitSyntax) (tree);

if (compilationUnitSyntax != null)
      compilationUnitSyntax.Usings.Add();

不幸的是,UsingDirectiveSyntax是内部的,所以如何添加一个! :d

解决方法

要创建SyntaxNodes,必须在Syntax.UsingDirective方法中使用Syntax类工厂方法.

您可以使用AddUsings方法添加新的使用方法

if (compilationUnitSyntax != null)
{
    var name = Syntax.QualifiedName(Syntax.IdentifierName("Custom"),Syntax.IdentifierName("Bar"));
    compilationUnitSyntax = compilationUnitSyntax
        .AddUsings(Syntax.UsingDirective(name).NormalizeWhitespace());
}

注意:由于CompilationUnitSyntax的不变性,您需要使用AddUsings调用的结果重新分配compilationUnitSyntax变量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读