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

How do I generate an array type in a Roslyn code generator?

我想生成一个 return 类型为 Foo[] 的方法。我的代码大致如下所示(using static SyntaxFactory):

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

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

Foo Bar()
{
    return null;
}

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

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

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

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

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