2009-04-05 3 views
0

Ich habe einige C# -Code zu bewerten, die die Microsoft Scripting Control verwendet einige Ausdrücke zu bewerten:Verwenden Sie Microsoft Scripting Control 'If' Ausdrücke (via C#)

(txtEx ist ein einfaches Textfeld)

numerische Ausdrücke: "6 + 4", "cos (34)", "abs (-99)", "round (1,234, 2)", etc. ist

Boolesche Ausdrücke fein: "true oder false" , "1 = 2" sind in Ordnung

Bu t Wie kann ich ein einfaches "Wenn" auswerten? Ich habe versucht "wenn (wahr, 2, 3)", "iif (wahr, 2, 3)", "wenn (wahr) dann 2 sonst 3" und "wenn (wahr) dann 2 sonst 3 endif"

Kann mir bitte jemand helfen, einfache bedingte Ausdrücke auszuwerten? Jede Hilfe sehr geschätzt!

RH

+1

Diese Frage ist sehr alt. Du solltest eins annehmen, wenn es geholfen hat !! –

Antwort

3

Versuchen Sie IF-Ausdruck in einer Funktion Einwickeln

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

Fügen Sie die Funktion der Kontrolle und dann auf Ausführen verwenden

Result = ScriptControl.Run("Test") 

(der Code oben nicht getestet, aber etwas in dieser Art und Weise sollte funktionieren)

Schauen Sie sich diesen Link für weitere Informationen

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

1

Sie sollten die Ausdrucksauswertung Motor prüfen, mit, die Teil von Windows Workflow Foundation ist. Sowohl der Evaluator als auch der Designer dafür können getrennt von WF verwendet werden.

1
if (true) then return 2 else return 3 
0

Danke für die Tipps! Nach etwas mehr experimentieren, basierend auf Brummo Hilfe scheint dies zu funktionieren:

txtEx enthält diesen Text:

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

dann

sc.AddCode (txtEx.Text);

und

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

Das ist nicht ideal, da ich wirklich einen Ausdruck, ohne Gebäude, Laden und Auswerten einer Funktion ausgewertet werden wollte. (Ich bin überrascht, IIF funktioniert nicht für einfache eine Zeile, wenn Bewertung).

+0

Vorsicht vor einem IIF! –

1
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); 
} 
Verwandte Themen