protected override Expression VisitMethodCall(MethodCallExpression m)
        {
            if (m.IsIfMethod())
            {
                Expression predicate = m.Arguments[1].RemoveCastToObject();
                Expression result = new MemberAccessNullPropagateVisitor().Rewrite(predicate);

                BinaryExpression conditionPredicate = Expression.Equal(result, Expression.Constant(result.Type.GetDefaultValue(), result.Type));
                return Expression.Condition(conditionPredicate, Expression.Constant(m.Arguments[0].Type.GetDefaultValue(), m.Arguments[0].Type), m.Arguments[0]);
            }
            return base.VisitMethodCall(m);
        }