-
Notifications
You must be signed in to change notification settings - Fork 11
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Describe the bug
ToString throw exception when render binary expression with non existed enum value
To Reproduce
using System.Linq.Expressions;
using ExpressionTreeToString;
//OK
_ = ((Expression<Func<TestEnum, bool>>)(it => it > TestEnum.A)).ToString("c#");
//OK
_ = ((Expression<Func<TestEnum, bool>>)(it => it > (TestEnum)1)).ToString("c#");
//OK
_ = ((Expression<Func<TestEnum, bool>>)(it => (int)it > 1)).ToString("c#");
//EXCEPTION
_ = ((Expression<Func<TestEnum, bool>>)(it => (int)it > 0)).ToString("c#");
//EXCEPTION
_ = ((Expression<Func<TestEnum, bool>>)(it => it > (TestEnum)0)).ToString("c#");
public enum TestEnum { A = 1 }
Expected behavior
Output without exception, something like
it => (Int32)it > 1
or
it => it > (TestEnum)1
Version info
net8.0
ExpressionTreeToString 3.4.71
Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
at ExpressionTreeToString.Util.ExpressionExtensions.Deconstruct(Expression expr, ExpressionType& nodeType, Type& type)
at ExpressionTreeToString.CSharpWriterVisitor.getPrecedence(Expression node, Type parentType)
at ExpressionTreeToString.CSharpWriterVisitor.Parens(OneOf`2 arg, String path, Expression childNode)
at ExpressionTreeToString.CSharpWriterVisitor.WriteBinary(ExpressionType nodeType, String leftPath, Expression left, String rightPath, Expression right)
at ExpressionTreeToString.CodeWriterVisitor.WriteBinary(BinaryExpression expr)
at ExpressionTreeToString.BuiltinsWriterVisitor.writeExpression(Expression expr)
at ExpressionTreeToString.BuiltinsWriterVisitor.WriteNodeImpl(Object o, Boolean parameterDeclaration, Object metadata)
at ExpressionTreeToString.WriterVisitorBase.WriteNode(String pathSegment, Object o, Boolean parameterDeclaration, Object metadata)
at ExpressionTreeToString.CSharpWriterVisitor.WriteLambda(LambdaExpression expr)
at ExpressionTreeToString.BuiltinsWriterVisitor.writeExpression(Expression expr)
at ExpressionTreeToString.BuiltinsWriterVisitor.WriteNodeImpl(Object o, Boolean parameterDeclaration, Object metadata)
at ExpressionTreeToString.WriterVisitorBase.WriteNode(String pathSegment, Object o, Boolean parameterDeclaration, Object metadata)
at ExpressionTreeToString.WriterVisitorBase..ctor(Object o, OneOf`2 languageArg, IEnumerable`1 insertionPointKeys, Boolean hasPathSpans)
at ExpressionTreeToString.BuiltinsWriterVisitor..ctor(Object o, OneOf`2 languageArg, IEnumerable`1 insertionPointKeys, Boolean hasPathSpans)
at ExpressionTreeToString.CodeWriterVisitor..ctor(Object o, OneOf`2 languageArg, Boolean hasPathSpans)
at ExpressionTreeToString.CSharpWriterVisitor..ctor(Object o, Boolean hasPathSpans)
at ExpressionTreeToString.Renderers.<>c.<.cctor>b__6_0(Object o, OneOf`2 languageArg, Boolean usePathSpans)
at ExpressionTreeToString.Renderers.Invoke(OneOf`2 rendererArg, Object o, OneOf`2 language)
at ExpressionTreeToString.ExpressionExtension.ToString(Expression expr, OneOf`2 rendererArg, OneOf`2 language)
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working