【问题标题】:How do I generate an array type in a Roslyn code generator?如何在 Roslyn 代码生成器中生成数组类型?
【发布时间】: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[] 类型?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-04-15
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 2012-10-30
      • 2017-03-30
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多