加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Roslyn – 在SyntaxNode上调用ToString而不保留优先级

发布时间:2020-12-15 08:10:39 所属栏目:百科 来源:网络整理
导读:如果我创建两个int文字的二进制添加表达式(addExpression),如下所示: BinaryExpressionSyntax addExpression = SyntaxFactory.BinaryExpression(SyntaxKind.AddExpression,SyntaxFactory.LiteralExpression (SyntaxKind.NumericLiteralExpression,SyntaxFac
如果我创建两个int文字的二进制添加表达式(addExpression),如下所示:
BinaryExpressionSyntax addExpression = SyntaxFactory.BinaryExpression(SyntaxKind.AddExpression,SyntaxFactory.LiteralExpression
                                            (SyntaxKind.NumericLiteralExpression,SyntaxFactory.Literal(10)),SyntaxFactory.Literal(100)));

. .然后是二进制乘法表达式,其中left是addExpression,right是int literal

BinaryExpressionSyntax multExpression = SyntaxFactory.BinaryExpression(SyntaxKind.MultiplyExpression,addExpression,SyntaxFactory.LiteralExpression
                                         (SyntaxKind.NumericLiteralExpression,SyntaxFactory.Literal(5)));

调用multExpression.ToString()输出10 100 * 5.我希望它输出(10 100)* 5.
这是正确的行为吗?

解决方法

Roslyn语法构造API不保证您只能构建有效的程序.如您所发现的那样,完全可以构建一个程序,该程序不会使用工厂API对解析器进行往返.

确保所有建造的树木都是圆形的,既困难又昂贵.我们需要复制解析器中的所有逻辑,并花费大量时间来验证正确性.

注意在任何地方添加括号的注释.可以添加标有Microsoft.CodeAnalysis.Simplification.Simplifier.Annotation批注的括号,然后在构造之后调用Simplifier.Simplify以删除不必要的括号.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读