static Node ParseExpression(UnaryExpression e) { switch (e.NodeType) { case ExpressionType.Convert: return new UnaryNode {Prefix = "(" + NameOfType(e.Type) + ")", Operand = Parse(e.Operand), PrefixValue = GetValue(e)}; case ExpressionType.Not: return ParseUnaryNot(e); case ExpressionType.Negate: case ExpressionType.NegateChecked: return new UnaryNode {Prefix = "-", Operand = Parse(e.Operand), PrefixValue = GetValue(e)}; case ExpressionType.ArrayLength: return new MemberAccessNode {Container = Parse(e.Operand), MemberName = "Length", MemberValue = GetValue(e)}; } throw new ArgumentOutOfRangeException("e", string.Format("Can't handle UnaryExpression expression of class {0} and type {1}", e.GetType().Name, e.NodeType)); }
static Node ParseExpression(UnaryExpression e) { switch (e.NodeType) { case ExpressionType.Convert: return new UnaryNode { Prefix = "(" + NameOfType(e.Type) + ")(", Operand = Parse(e.Operand), Suffix = ")", PrefixValue = GetValue(e) }; case ExpressionType.Not: return new UnaryNode { Prefix = "!", Operand = Parse(e.Operand), PrefixValue = GetValue(e) }; case ExpressionType.Negate: case ExpressionType.NegateChecked: return new UnaryNode { Prefix = "-", Operand = Parse(e.Operand), PrefixValue = GetValue(e) }; } throw new ArgumentOutOfRangeException("e", string.Format("Can't handle UnaryExpression expression of class {0} and type {1}", e.GetType().Name, e.NodeType)); }