【问题标题】:Roslyn Region Trivia罗斯林地区琐事
【发布时间】:2018-01-07 17:44:54
【问题描述】:

如何创建 RegionDirectiveTriviaSyntax?

下面是我得到的最接近的结果,但它失败了。第三个参数被定义为“名称”,但没有相应的类型。我尝试过文字、标识符和其他几种标记,但它们都抱怨种类。有没有正确的解析方法,所以我不必做“替换”?

trivia 是一个现有的 C# SyntaxTrivia,我正在创建一个 VB RegionDirectiveTriviaSyntax:

Dim node As RegionDirectiveTriviaSyntax =
                SyntaxFactory.RegionDirectiveTrivia
                              (SyntaxFactory.Token(SyntaxKind.HashToken),
                               SyntaxFactory.Token(SyntaxKind.RegionKeyword),
                               SyntaxFactory.Token
                                             (SyntaxKind.IdentifierToken, 
                                              trivia.ToString.Replace("#region ", "")
                                             )
                              )

【问题讨论】:

  • 根据SyntaxFactory.RegionDirectiveTrivia Method,三个参数中的每一个都是一个Microsoft.CodeAnalysis.SyntaxToken。你的 VS 的 Intellisense 不工作吗?我误解了这个问题吗?
  • 使用source!它表明它特别想要一个StringLiteralToken
  • 是的,Intellisense 可以工作,但是有很多 SyntaxToken 种类。我正在寻找的答案是“StringLiteralToken”。谢谢。问题的另一部分是你如何挑选一个的部分,我看不到任何我可以投射 SyntaxTravia 的东西,这让我可以得到特别是 StringLiteralToken 的部分。
  • 使用 StringLiteralToken 我得到相同的消息 =“指定的参数超出了有效值的范围。” & vbCrLf & "参数名称:种类"

标签: c# vb.net roslyn


【解决方案1】:

如果您不知道 SyntaxTree 是如何为某些特定的 SyntaxNode 构建的,例如在这种情况下的 Region。以下是您可以执行的操作:

确保您已安装 .NET Compiler Platform SDK。这会将 Syntax Visualizer 添加到 Visual Studio。它允许您检查源代码的语法树。

转到查看->其他窗口->语法可视化器或在快速启动栏中搜索以显示以下面板:

只需将光标放在要检查的代码上。 Syntax Visualizer 将跳转到树中的特定节点。如果您单击区域的名称,您可以看到该节点是使用 3 个特定令牌创建的:HashTokenRegionKeyWord 和一个StringLiteralToken。以下代码将创建相同的RegionDirectiveTrivia

Dim regionDirectiveTriviaSyntax =
    SyntaxFactory.RegionDirectiveTrivia(
        SyntaxFactory.Token( SyntaxKind.HashToken),
        SyntaxFactory.Token( SyntaxKind.RegionKeyword ) , 
        SyntaxFactory.StringLiteralToken( "SomeRegionName" , "SomeRegionName") )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 2019-12-24
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多