处理从用户中挑选的多个条件的最有效方法是什么?

时间:2014-07-22 12:03:29

标签: c#

我正在使用C#构建一个scraper,并且用户希望能够键入多个条件:

  • 人名
  • 年龄
  • AND / OR声明

我们从网页上获取这些人,并将他们的年龄与用户输入的年龄进行比较。

以下是最终条件的示例:

if((person1.age == AgeTextBox1.Text && person2.age== AgeTextBox2.Text) || ( person1.age = AgeTextBox1.Text && person3.age== AgeTextBox3.Text && person2.age== AgeTextBox2.Text))
{
    //do stuff
}

他希望能够使用多达10年。

我想到的唯一想法是使用大量TextBoxCheckBox控件,然后使用if-else if语句处理每个可能的结果,但这看起来很荒谬需要大量if个陈述。

处理所有可能情况的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

另一个想法是当用户按下“TextBox”按钮时动态添加Add es(或更好的方法来创建用户控件)。然后在创建时跟踪它们,在List<>中然后用户按下按钮,在List中循环并逐个检索所有Text。无需在设计时添加它们。

答案 1 :(得分:0)

运算符优先级和嵌套怎么样?唯一合适的解决方案是拥有条件和运算符树并动态附加条件和运算符节点。 &#34; UI&#34;样品:

[Conditions]
[Add AND] [Add OR] [Add Condition] [Remove selected node]
AND
  Age equals 100
  OR
    Name equals "Foo"
    Name equals "Bar"

代码将类似于

public class Node {
  public virtual bool Evaluate(Person p);
}

public class AndNode : Node {
  public IList<Node> Children { get; set; }

  public override bool Evaluate(Person p) {
    foreach(var node in Children) {
      if (!node.Evaluate(person))
        return false;
    }
    return true;
  }
}

public class AgeNode : Node {
  public int Value { get; set; }
  public override bool Evaluate(Person p) {
    return p.Age == Value;
  }
}

... etc