2016-06-27 2 views
-3

Я получаю и выражение (строка) следующим образом:с TryParse статическим методом

String expression = "+name;-age;-city"; 

я разобрать это выражение, разделив его с помощью ";" и interpreting the +/- signs and create a List<OrderRule>. Для того, чтобы обернуть это я создал следующее:

public class OrderExpression { 

    public HashSet<OrderRule> Rules { get; set; } 

    public static Boolean TryParse(String expression, out OrderExpression orderExpression) { 
    // Parse expression into a List<OrderRule> 
    if (_parser.ExpressionIsValid(expression)) { 
     orderExpression = new OrderExpression { Rules = _parser.Parse(expression) } 
     return true; 
    else 
     return false; 
    } 
} 

Так что я хотел бы использовать его следующим образом:

String expression = "+name;-age;-city"; 
OrderExpression orderExpression; 
OrderExpression.TryParse(expression, out orderExpression); 

ли это смысл? Я не уверен, что эта архитектура и именование - путь.

Я занимаюсь этим, потому что я буду использовать его в качестве стандарта для API для преобразования выражения заказа в список.

+6

лучше спросите об этом по адресу http://codereview.stackexchange.com/ – nozzleman

+0

Подумайте, как именно работает «TryParse» DateTime, тогда я бы сказал, что это имеет смысл. –

+2

Btw этот код не компилируется –

ответ

0

Это имеет смысл, но одна мысль:

if (_parser.ExpressionIsValid(expression)) { 
    orderExpression = new OrderExpression { Rules = _parser.Parse(expression) } 

Вы проверки один раз, чтобы убедиться, что это действительно, и если да, то вы на самом деле его анализом. Не могли бы вы повторить один и тот же разбор?

Если есть какая-то разница между тем, что ExpressionIsValid делает и то, что _parser.Parse делает то вполне возможно, что ExpressionIsValid может вернуться true но _parse.Parse бросает исключение. В этом случае вместо возврата false метод выдаст исключение.

Поскольку это функция TryParse, цель состоит в том, чтобы сделать ее безопасной - она ​​вернет true или false, но не выдаст исключение, если синтаксический анализ завершился с ошибкой.

Если эти два метода делают то же самое, то, возможно, вы должны объединить их или иметь другую функцию, которая обертывает их. Но если они не делают то же самое, то вы должны учитывать возможность того, что ExpressionIsValid возвращает true, но затем Parse выдает исключение.

Смежные вопросы