2

我有一个场景,其中我想评估以字符串形式给出的布尔表达式。如何评估在X ++中以字符串形式给出的布尔表达式[AX 2012]

例如, 传递给某个函数时,会将“1 == 4”评估为/返回FALSE。

同样, “1 == 1”传递给同一个函数时,将评估为TRUE。

如果可以这样做,那么我肯定会想要某种方式来评估动态布尔表达式。 例如, “workHours == 4”是字符串表达式,workHours是变量。

如果您知道,请告诉我任何解决方案。 谢谢。

回答

2

自我学习的答案:

下面的代码示例,你可以怎么做。

static void Job22(Args _args) 
{ 

str expr = 'ab==2'; 
str method = @'boolean eval(int ab){return ' + expr + ';}'; 
boolean result; 
; 
result = runBuf(method, 5); 
info (strfmt("Calculation result is %1", result)); 

} 
2

有许多方法可以通过.NET(例如使用XLNT Framework)和通过X ++中的某些内在函数从文本中评估X ++表达式。但我敢肯定,你可以用更简洁的方法达到同样的解决方案。例如,你可以将一个容器传递给一个函数,然后比较它们的值,或者类似的东西。

如果您仍然想这样做,请看看X ++中的runbuf函数。

http://msdn.microsoft.com/en-us/library/aa656300.aspx

2

这可能是一个更好的例子,您可以轻松更改expression

static void RunBufExample() 
{ 
    str     expression = '2==1'; 
    str     func = 'boolean myFunc() {return ' + expression + ';}'; 
    boolean    retVal;  
    new ExecutePermission().assert(); 
    retVal = runBuf(func); 
    CodeAccessPermission::revertAssert(); 
    info(strFmt("%1", retVal)); 
} 
+1

@jan - 关于编辑,我只是​​修改了MSDN例子盲目。这就是为什么第二组代码总是有帮助的原因! –

相关问题