Давайте сломаем это на два вопроса.
1) Могу ли я написать существующую логику в одном утверждении?
Локальная переменная должна быть объявлена в ее собственном заявлении, но инициализатор не обязательно должен быть там. Вполне законно сказать:
Form f;
if (!(f=new Form("myform")).validate(d))return f.errors.toJSON();
Почему вы хотели бы быть вне меня; делать это уродливо, трудно отлаживать, трудно понять и трудно поддерживать. Но это совершенно законно.
2) Могу ли я сделать этот метод экземпляра статическим методом?
Возможно, не напрямую. Предположим, у вас было два абонента, проверяющих материал на двух разных потоках, оба вызывали статический метод Form.Validate и оба производили ошибки. Теперь у вас гонка. Один из них собирается выиграть и заполнить Form.Errors. И теперь у вас есть два потока, сообщающих один и тот же набор ошибок, но ошибки неверны для одного из них.
Лучший способ сделать это в статическом методе - сделать целую вещь в статический метод, который имеет желаемую семантику, как в ответе цоколя.
Errors errors = Validator.Validate(d);
if (errors != null) return errors.toJSON();
Теперь код очень ясен, а реализация Validate проста. Создайте форму, вызовите валидатор, либо верните null, либо ошибки.
Я бы предположил, что вам не нужен совет по телефону , уменьшая количество кода, который вы пишете.Скорее, получите совет по , как сделать код более похожим на значение, которое он намеревается представлять. Иногда это означает, что нужно писать немного больше кода, но этот код ясен и понятен.
Что случилось с его нынешней форме? Если вы одержимы тем, что делаете это на одной строке, поместите инструкцию 'if' сразу после точки с запятой. –