繁体   English   中英

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

[英]What is the most efficient way to handle multiple conditions that are picked from the user?

我正在C#中构建一个刮板,用户希望能够键入多个条件:

  • 人名
  • 年龄
  • 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语句。

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

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

运算符优先级和嵌套呢? 唯一合适的解决方案是拥有条件和运算符树,并动态附加条件和运算符节点。 “ UI”示例:

[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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM