0

我有一些使用 Microsoft Scripting Control 来评估某些表达式的 c# 代码:

using MSScriptControl; // references msscript.ocx

ScriptControlClass sc = new ScriptControlClass();
sc.Language = "VBScript";
sc.AllowUI = true;

try
{
    Console.WriteLine(sc.Eval(txtEx.Text).ToString());
}
    catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

(txtEx 是一个简单的文本字段)

数值表达式:“6+4”、“cos(34)”、“abs(-99)”、“round(1.234, 2)”等都可以

布尔表达式:“真或假”、“1=2”都可以

但是我如何评估一个简单的“如果”呢?我试过“if(true, 2, 3)”、“iif(true, 2, 3)”、“if (true) then 2 else 3”和“if (true) then 2 else 3 endif”

有人可以帮我评估简单的条件表达式吗?非常感谢任何帮助!

相对湿度

4

5 回答 5

3

尝试将您的 IF 表达式包装在一个函数中

Function test
   if (true) then
      return true
   else
      return false
   end if
End function

将函数添加到控件,然后使用 Run

Result = ScriptControl.Run("Test")

(上面的代码未经测试,但沿途的东西应该可以工作)

查看此链接以获取更多信息

http://support.microsoft.com/kb/184740

于 2009-04-05T13:18:07.753 回答
2
using MSScriptControl; // references msscript.ocx

ScriptControlClass sc = new ScriptControlClass();
sc.Language = "VBScript";
sc.AllowUI = true;

// VBScript engine doesn’t have IIf function
// Adding wraper IIF function to script control.
// This IIF function will work just as VB6 IIf function.
sc.AddCode(@"Function IIF(Expression,TruePart,FalsePart)
                If Expression Then
                    IIF=TruePart
                Else
                    IIF=FalsePart
                End IF
            End Function");
try
{
    //define x,y variable with value
    sc.AddCode(@"x=5
                y=6");
    //test our IIF 
    Console.WriteLine(sc.Eval("IIF(x>y,x,y)").ToString());
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}
于 2012-09-01T09:53:32.450 回答
1

您应该考虑使用作为 Windows Workflow Foundation 一部分的表达式评估引擎。评估者和设计者都可以与 WF 分开使用。

于 2009-04-05T13:12:34.647 回答
1
if (true) then return 2 else return 3
于 2009-04-05T13:54:43.827 回答
0

感谢您的提示!在 Brummo 的帮助下,经过更多的试验,这似乎可行:

txtEx 包含以下文本:

function test
  if (1=1) then 
    test = true
  else 
    test = false
  end if
end function

然后

sc.AddCode(txtEx.Text);

object[] myParams = { };
Console.WriteLine(sc.Run("Test", ref myParams).ToString());

这并不理想,因为我真的想评估一个表达式,而不是构建、加载和评估一个函数。(如果评估,我很惊讶 IIF 不适用于简单的一行)。

于 2009-04-06T11:50:20.703 回答