【问题标题】:Evaluate user expression评估用户表达
【发布时间】:2013-03-12 13:46:02
【问题描述】:

我正在开发一个带有文本框的 Web 应用程序。用户输入条件以显示“字符串”的特定颜色。该字符串包含一些整数值。

用户像这样为字符串值指定条件,

>30:"Red"
<20:"Green"
:"Yellow:

这是一个条件。它类似于 if,elseif,else 条件。用户只能指定 if,else like 像这样的条件

>60:"Blue"
:"White"

(这意味着如果字符串值大于 60,则将“蓝色”作为字符串的颜色,否则将“白色”作为字符串的颜色)

我必须根据在每个字符串的文本框中输入的上述条件来评估字符串的颜色。有数千个带有值的字符串,用户将为每个字符串输入这样的表达式。

解决此问题的最佳方法是什么?

【问题讨论】:

  • 我已经为每个表达式创建了程序集并在运行时加载它们以评估表达式,但是因为有太多的程序集并且在运行时加载它们以评估表达式会导致内存问题。
  • 你需要先解析这个字符串,标记它,然后自己构建条件。

标签: c# asp.net expression


【解决方案1】:
String input = getTextBoxInput() // get input from text box
if(input.contains("<") || input.contains("<"))
{
   if(input.contains("<"))
   {
      int index = input.indexOf("<");
      String conditionString = input.substring(index+1,input.length());
      // condition number is the number being compared
      int conditionNumber = conditionString.split(":")[0];
      // if condition is true then get the corresponding colour
      if(number < conditionNumber){setColor(conditionString.split(":")[1])}
      // check if it an if else condition and do the following
      else if(input.length()>1){ setColor(conditionString.split(":")[2])}
   }
}

这是基本的伪代码。您可以为 "" 定义常量。此外,如果输入不正确,您可能需要进行一些异常处理。

【讨论】:

    【解决方案2】:

    请看Shunting Yard算法,你需要有类似的东西

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      相关资源
      最近更新 更多