使用TryParse静态方法的类

时间:2016-06-27 13:49:55

标签: c#

我正在接收和表达式(String)如下:

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的标准,将订单表达式转换为List。

1 个答案:

答案 0 :(得分:0)

这很有意义,但有人想到:

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

您需要检查一次以确保它有效,如果有效,您实际上正在解析它。你能两次做同样的解析吗?

如果ExpressionIsValid做什么与_parser.Parse做什么之间存在任何差异,那么ExpressionIsValid可能会返回true但{} { {1}}抛出异常。在这种情况下,该方法将抛出异常而不是返回_parse.Parse

由于这是一个false函数,目的是使其安全 - 它将返回TryParsetrue,但如果解析失败则不会抛出异常。

如果这两种方法完全相同,那么也许你应该将它们组合在一起,或者让另一种方法包装它们。但是,如果他们做同样的事情,那么你应该考虑false返回ExpressionIsValid然后true抛出异常的可能性。< / p>