【问题标题】:Use Operator from array in IF statement在 IF 语句中使用数组中的运算符
【发布时间】:2015-06-25 16:07:19
【问题描述】:

我正在尝试使用从 if 语句中的数组中选择的运算符。由于代码在下面,我无法编译它。反正有这个吗?

string[] operators = new string[]{"<",">","=","!="};

decimal value = Convert.ToDecimal(values[j]);
var operator1 = (operators[Convert.ToInt32(IQueryTypeList[k])]);
int jjj = Convert.ToInt32(NTestValueList[k]);

if (value operator1 jjj)
{
    IsActive = true;
}
else
{
    IsActive = false;
}

【问题讨论】:

  • 我不确定@value 是什么,但你不能在if 语句中使用字符串作为比较运算符——你必须使用实际的运算符。
  • 那是错误的,对不起,那有可能有一个运算符数组吗?
  • 您仍然可以使用运算符数组,但您需要使用 if/elseswitch 编写逻辑来确定运算符是什么,然后在该块中写入 正确的代码。

标签: c#


【解决方案1】:

一种方法是使用 if-else 链或 switch 语句执行字符串比较。我不知道 C# 的确切语法,所以将以下内容视为伪代码:

if (operator1.equals("<"))
    IsActive = value < jjj
// etc.

【讨论】:

  • 哦...这是一个非常优雅的解决方案 :)
  • 这正是我一直在寻找的东西,谢谢。
  • @Tim Yah,我敢肯定还有其他更优雅的解决方案。我是来自 Java 的 C# 菜鸟。当然,如果这是某种解析器的一部分,我也会构建“节点”类来表示抽象语法树中的运算符。这将允许多态性而不是显式的ifswitch
【解决方案2】:

您不能简单地将字符串用作运算符,但您可以编写一个扩展方法来使用字符串。查看here 以获得更深入的解释。

【讨论】:

  • 这应该是一条评论。
【解决方案3】:

您可以使用 switch-case 逻辑:

string[] operators = new string[]{"<",">","=","!="};
decimal value = Convert.ToDecimal(values[j]);
var operator1 = (operators[Convert.ToInt32(IQueryTypeList[k])]);
int jjj = Convert.ToInt32(NTestValueList[k]);

switch (operator1)
{
    case "<":
        //do something here
        break;
    case ">":
         //do something here
        break;
    case "=":
        //do something here
        break;
    case "!=":
        //do something here
        break;
}

【讨论】:

    猜你喜欢
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2013-03-19
    • 2011-05-15
    • 1970-01-01
    相关资源
    最近更新 更多