我正在接收和表达式(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。
答案 0 :(得分:0)
这很有意义,但有人想到:
if (_parser.ExpressionIsValid(expression)) {
orderExpression = new OrderExpression { Rules = _parser.Parse(expression) }
您需要检查一次以确保它有效,如果有效,您实际上正在解析它。你能两次做同样的解析吗?
如果ExpressionIsValid
做什么与_parser.Parse
做什么之间存在任何差异,那么ExpressionIsValid
可能会返回true
但{} { {1}}抛出异常。在这种情况下,该方法将抛出异常而不是返回_parse.Parse
。
由于这是一个false
函数,目的是使其安全 - 它将返回TryParse
或true
,但如果解析失败则不会抛出异常。
如果这两种方法完全相同,那么也许你应该将它们组合在一起,或者让另一种方法包装它们。但是,如果他们不做同样的事情,那么你应该考虑false
返回ExpressionIsValid
然后true
抛出异常的可能性。< / p>