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

时间:2018-01-24 19:06:40

标签: c# visual-studio code-generation roslyn

我想生成一个返回类型为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 个答案:

答案 0 :(得分:4)

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

ArrayType工厂方法创建的ArrayTypeSyntax根本没有RankSpecifiers。要生成常用的Foo[]语法,您需要为其提供一个空的排名说明符。

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

对我来说似乎有些愚蠢的默认,因为1D阵列是目前最常见的。据我所知,这在任何地方都没有记载。