类与TryParse静态方法

本文关键字:静态方法 TryParse 类与 | 更新日期: 2023-09-27 17:52:11

我正在接收和表达式(字符串)如下:

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的标准,将顺序表达式转换为列表

类与TryParse静态方法

这是有道理的,但一个想法:

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

您检查一次以确保它是有效的,如果是,则实际解析它。你可以做两次相同的解析吗?

如果ExpressionIsValid所做的和_parser.Parse所做的有任何区别,那么ExpressionIsValid可能返回true,但_parse.Parse抛出异常。在这种情况下,该方法将抛出异常,而不是返回false

因为这是一个TryParse函数,目的是使其安全-它将返回truefalse,但如果解析失败不会抛出异常。

如果这两个方法做的是完全相同的事情,那么也许你应该把它们组合起来,或者用另一个函数来包装它们。但是如果它们不是做同样的事情,那么你应该考虑ExpressionIsValid返回true的可能性,但是Parse抛出异常。