如何在 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
工厂方法创建了一个根本没有 RankSpecifiers
的 ArrayTypeSyntax
。要生成常用的 Foo[]
语法,您需要给它一个空的等级说明符。
ArrayType(IdentifierName("Foo"), SingletonList(ArrayRankSpecifier()))
对我来说这似乎是一个愚蠢的默认值,因为一维数组是迄今为止最常见的。据我所知,这在任何地方都没有记录。
我想生成一个 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
工厂方法创建了一个根本没有 RankSpecifiers
的 ArrayTypeSyntax
。要生成常用的 Foo[]
语法,您需要给它一个空的等级说明符。
ArrayType(IdentifierName("Foo"), SingletonList(ArrayRankSpecifier()))
对我来说这似乎是一个愚蠢的默认值,因为一维数组是迄今为止最常见的。据我所知,这在任何地方都没有记录。