c# - 如何使用 .NET 编译器平台创建 const 声明

标签 c# code-generation roslyn

我正在尝试使用 Roslyn 或现在称为 .NET Compiler Platform 创建一个小型代码生成器,之前我使用 codedom,这很麻烦,但 MSDN 得到了引用,现在 Roslyn 几乎没有文档,所有文档都是专注于代码分析而不是代码生成。 所以我的问题很简单: 我怎样才能创建类似的东西:

private const string MyString = "This is my string";

使用编译器平台类?我发现了类似 FieldDeclarationSyntax 和 ExpressionSyntax 的东西,但我发现的所有样本都会生成类似 Myclass myvariable = new Myclass(); 没有什么比如何生产 字符串类型声明。 任何线索都会很棒。 提前谢谢你

最佳答案

您可以使用 Roslyn Quoter轻松弄清楚如何构建不同的语法片段。在这种情况下,您想要将 constprivate 修饰符添加到字段声明中,因此它看起来像:

var constField = SyntaxFactory.FieldDeclaration(
    SyntaxFactory.VariableDeclaration(
        SyntaxFactory.PredefinedType(
            SyntaxFactory.Token(SyntaxKind.StringKeyword)))
    .WithVariables(
        SyntaxFactory.SingletonSeparatedList<VariableDeclaratorSyntax>(
            SyntaxFactory.VariableDeclarator(
                SyntaxFactory.Identifier("MyString"))
            .WithInitializer(
                SyntaxFactory.EqualsValueClause(
                    SyntaxFactory.LiteralExpression(
                        SyntaxKind.StringLiteralExpression,
                        SyntaxFactory.Literal("This is my string")))))))
.WithModifiers(
    SyntaxFactory.TokenList(
        new []{
            SyntaxFactory.Token(SyntaxKind.PrivateKeyword),
            SyntaxFactory.Token(SyntaxKind.ConstKeyword)}))))))

关于c# - 如何使用 .NET 编译器平台创建 const 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37600626/

相关文章:

c# - 获取分配给单个用户的数据

c# - 在c# mono应用程序中通过localhost/127.0.0.1 mysql连接到本地MariaDB MySQL Linux服务器的问题

graphql - Graphql 中的架构和文档有什么区别?

java - 为什么外部类在泛型类型名称中出现两次?

c# - 是否可以在 RoslynPad RoslynCodeEditor 控件中包含 globalsType 对象全局的智能感知?

c# - 网络 MVC : Is there support for controller level filter attributes?

c# - 不使用 KeyVault 的 Azure 表存储客户端加密

java - Lombok 与 hibernate

c# - 存在项目引用时,不会填充项目元数据引用

c# - 为什么 VS 2017 建议用方法替换属性?