如何在 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 代码生成器中生成数组类型?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据构造型而不是元素类型从 uml 建模项目在 Visual Studio 中生成代码?