@@ -9938,11 +9938,11 @@ internal static StringBuilder CreateExpressionString(this Expression e, StringBu
99389938 [RequiresUnreferencedCode(Trimming.Message)]
99399939 public static class ToCSharpPrinter
99409940 {
9941- /// <summary>Tries hard to convert the expression into the valid C# code</summary>
9942- public static string ToCSharpString(this Expression expr) =>
9943- expr.ToCSharpString(new StringBuilder(1024), stripNamespace: true).Append(';').ToString();
9941+ /// <summary>Tries hard to convert the expression into the valid C# code. Avoids parens by default for the root expr. </summary>
9942+ public static string ToCSharpString(this Expression expr, EnclosedIn enclosedIn = EnclosedIn.AvoidParens ) =>
9943+ expr.ToCSharpString(new StringBuilder(1024), enclosedIn, stripNamespace: true).Append(';').ToString();
99449944
9945- /// <summary>Tries hard to convert the expression into the valid C# code</summary>
9945+ /// <summary>Tries hard to convert the expression into the valid C# code. Avoids parens by default for the root expr. </summary>
99469946 public static string ToCSharpString(this Expression expr, ObjectToCode notRecognizedToCode, EnclosedIn enclosedIn = EnclosedIn.AvoidParens) =>
99479947 expr.ToCSharpString(new StringBuilder(1024), stripNamespace: true, notRecognizedToCode: notRecognizedToCode).Append(';').ToString();
99489948
@@ -10780,20 +10780,20 @@ void PrintPart(Expression part, ref TNamed named)
1078010780 false, lineIndent, stripNamespace, printType, indentSpaces, notRecognizedToCode);
1078110781 }
1078210782
10783- sb = !avoidParens ? sb.Append ('(') : sb ;
10783+ sb = sb.AddParenIfNeeded ('(', avoidParens) ;
1078410784 b.Left.ToCSharpExpression(sb, EnclosedIn.ParensByDefault, ref named,
1078510785 false, lineIndent, stripNamespace, printType, indentSpaces, notRecognizedToCode);
1078610786
1078710787 if (nodeType == ExpressionType.Equal)
1078810788 {
1078910789 if (b.Right is ConstantExpression r && r.Value is bool rb && rb)
10790- return sb;
10790+ return sb.AddParenIfNeeded(')', avoidParens) ;
1079110791 sb.Append(" == ");
1079210792 }
1079310793 else if (nodeType == ExpressionType.NotEqual)
1079410794 {
1079510795 if (b.Right is ConstantExpression r && r.Value is bool rb)
10796- return rb ? sb.Append(" == false") : sb;
10796+ return ( rb ? sb.Append(" == false") : sb).AddParenIfNeeded(')', avoidParens) ;
1079710797 sb.Append(" != ");
1079810798 }
1079910799 else
@@ -10815,6 +10815,9 @@ private static bool AvoidParens(EnclosedIn enclosedIn) =>
1081510815 enclosedIn == EnclosedIn.Block | // statement in a block don't need the parens as well
1081610816 enclosedIn == EnclosedIn.Return;
1081710817
10818+ private static StringBuilder AddParenIfNeeded(this StringBuilder sb, char paren, bool avoidParen = false) =>
10819+ avoidParen ? sb : sb.Append(paren);
10820+
1081810821 private static StringBuilder ToCSharpBlock<TNamed>(this Expression expr, StringBuilder sb, ref TNamed named,
1081910822 int lineIndent, bool stripNamespace, Func<Type, string, string> printType, int indentSpaces, ObjectToCode notRecognizedToCode)
1082010823 where TNamed : struct, ISmallList<NamedWithIndex>
0 commit comments