使用Microsoft Scripting Control评估’If’表达式(通过c#)

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

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)”等都很好

布尔表达式:“true或false”,“1 = 2”没问题

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

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

RH

尝试将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

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

 if (true) then return 2 else return 3 
 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); } 

谢谢你的提示! 经过一些实验,基于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不适用于简单的一行)。