IF条件下的字符串评估

时间:2015-12-18 22:57:35

标签: c# parsing if-statement conditional-statements evaluation

让我说我有

int a = 1;
int b = 2;
string exp = "b > a";

我想用这些变量评估字符串表达式

if(exp.SomeKindOfParseOrCast())
{
   //here be magic
}

有可能以任何简单的方式吗?

4 个答案:

答案 0 :(得分:1)

不,不是在C#中 - 这些是参数名称,因此是编译时值,并且解析您正在描述的表达式是在运行时中完成的 - 计算机没有在评估参数时,不知道参数的名称。相反,你可以做一些更严格的事情,比如表达式解析器 - 实现你的自己的方式来解析字符串表达式。

非常非常简化:

if(exp.Equals("b > a"))
{
 if(b>a)
  // do what you do if b is bigger than a
 else 
  // do what you do with a wrong expression
}
else if (exp.Equals("a > b")
{ 
 if(a>b)
  // do what you do if a is bigger than b
 else
  // do what you do with a wrong expression
}
else if (exp.Equals("a = b")
{
 if(a==b)
  // do what you do if a is equal to b
 else 
  // do what you do with a wrong expression
}
else
 // do what you do with a badly formatted expression

如果您想向前迈出一步,可以缩小空格,确保表达式为小写等等。 - 周围有很多例子,我个人喜欢this one.

答案 1 :(得分:0)

  

有可能以任何简单的方式吗?

不,在C#中,这是不可能的,就像在JavaScript等语言中使用它的eval函数一样。无论如何,您必须提供表达式参数与实际值的绑定。

答案 2 :(得分:0)

你可以使用Roslyn。 这是如何在运行时编译和运行自己的代码的example

答案 3 :(得分:0)

免责声明:我是该项目的所有者Eval Expression.NET

这个库非常易于使用,可以评估和编译几乎所有的C#语言。

// For single evaluation
var value1 = Eval.Execute<bool>("b > a", new { a = 1, b = 2 });

// For many evaluation
var compiled = Eval.Compile<Func<int, int, bool>>("b > a", "a", "b");
var value2 = compiled(1, 2);