public static WixExpression Not(WixExpression wixExpressionBuilder)
        {
            if (wixExpressionBuilder is null)
            {
                throw new ArgumentNullException(nameof(wixExpressionBuilder));
            }

            return(new WixExpression($"{WixUnaryExpressionOperator.Not} {wixExpressionBuilder.ValueWithParentheses}"));
        }
        public static WixExpression Create(WixExpression lhs, WixBinaryExpressionOperator @operator, WixExpression rhs)
        {
            if (lhs is null)
            {
                throw new ArgumentNullException(nameof(lhs));
            }

            if (@operator is null)
            {
                throw new ArgumentNullException(nameof(@operator));
            }

            if (rhs is null)
            {
                throw new ArgumentNullException(nameof(rhs));
            }

            return(new WixExpression($"{lhs.ValueWithParentheses} {@operator} {rhs.ValueWithParentheses}"));
        }
 public static WixExpression Xor(WixExpression left, WixExpression right)
 => Create(left, WixLogicalExpressionOperator.Xor, right);
 public static WixExpression And(WixExpression left, WixExpression right)
 => Create(left, WixLogicalExpressionOperator.And, right);
 public WixExpression Xor(WixExpression other)
 => Xor(this, other);
 public WixExpression Or(WixExpression other)
 => Or(this, other);
 public WixExpression And(WixExpression other)
 => And(this, other);
 public static WixExpression LogicalNot(WixExpression expression)
 => Not(expression);
 public static WixExpression BitwiseOr(WixExpression left, WixExpression right)
 => Or(left, right);
 public static WixExpression BitwiseAnd(WixExpression left, WixExpression right)
 => And(left, right);