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

前端之家收集整理的这篇文章主要介绍了c# – Roslyn – 在SyntaxNode上调用ToString而不保留优先级前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我创建两个int文字的二进制添加表达式(addExpression),如下所示:
BinaryExpression@R_301_156@ addExpression = @R_301_156@Factory.BinaryExpression(@R_301_156@Kind.AddExpression,@R_301_156@Factory.LiteralExpression
                                            (@R_301_156@Kind.NumericLiteralExpression,@R_301_156@Factory.Literal(10)),@R_301_156@Factory.Literal(100)));

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

BinaryExpression@R_301_156@ multExpression = @R_301_156@Factory.BinaryExpression(@R_301_156@Kind.MultiplyExpression,addExpression,@R_301_156@Factory.LiteralExpression
                                         (@R_301_156@Kind.NumericLiteralExpression,@R_301_156@Factory.Literal(5)));

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

解决方法

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

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

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

原文链接:https://www.f2er.com/csharp/100999.html

猜你在找的C#相关文章