如何在 Roslyn 代码生成器中生成数组类型?

Posted

技术标签:

【中文标题】如何在 Roslyn 代码生成器中生成数组类型?【英文标题】:How do I generate an array type in a Roslyn code generator? 【发布时间】:2018-07-03 22:27:52 【问题描述】:

我想生成一个返回类型为Foo[] 的方法。我的代码大致是这样的(using static SyntaxFactory):

var methodDecl = MethodDeclaration(
    returnType: ArrayType(IdentifierName("Foo")),
    identifier: Identifier("Bar"),
    parameterList: ParameterList(),
    body: Block(ReturnStatement(LiteralExpression(SyntaxKind.NullLiteralExpression))),
    // ...
);

当我在调试 Visual Studio 窗口中执行重构时,它不会生成 Foo[] 类型的 [] 部分:

Foo Bar()

    return null;

如何让它生成一个实际的Foo[] 类型?

【问题讨论】:

【参考方案1】:

数组类型的[] 部分称为等级说明符。等级说明符描述了数组的大小和维度,就像int[10,3][12]

ArrayType 工厂方法创建了一个ArrayTypeSyntax,根本没有RankSpecifiers。要生成常用的Foo[] 语法,您需要给它一个空等级说明符。

ArrayType(IdentifierName("Foo"), SingletonList(ArrayRankSpecifier()))

对我来说似乎有点愚蠢,因为一维数组是迄今为止最常见的。据我所知,这在任何地方都没有记录。

【讨论】:

以上是关于如何在 Roslyn 代码生成器中生成数组类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 roslyn 在 C# 中生成/编辑打字稿代码

如何在python中生成数组的排列?

如何在 Matlab 中生成类的实例并将它们保存在数组中?

如何根据构造型而不是元素类型从 uml 建模项目在 Visual Studio 中生成代码?

java - 如何在java中生成与openssl生成的相同类型的ecdsa密钥对?

如何在 Python 中生成不同类型的图形?