2009-04-05 7 views
0

J'ai quelques C# code qui utilise le Microsoft Script de contrôle pour évaluer certaines expressions:Utilisez Microsoft Script de contrôle pour évaluer 'Si' les expressions (via C#)

(txtEx est un champ de texte simple)

expressions numériques: "6 + 4", "cos (34)", "abs (-99)", "ronde (1,234, 2)", etc., sont bien

expressions booléennes: "vrai ou faux" , "1 = 2" sont corrects

Bu t comment puis-je évaluer un simple «si»? J'ai essayé "if (true, 2, 3)", "if (true, 2, 3)", "if (true) then 2 else 3" et "if (true) then 2 else 3 endif"

Quelqu'un peut-il m'aider s'il vous plaît à évaluer des expressions conditionnelles simples? Toute aide très appréciée!

RH

+1

Cette question est très ancienne. Vous devriez en accepter un si ça vous a aidé !! –

Répondre

3

Essayez d'envelopper votre IF-expression dans une fonction

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

Ajouter la fonction à la commande, puis utiliser l'option Exécuter

Result = ScriptControl.Run("Test") 

(le code ci-dessus n'est pas testé, mais quelque chose le long de cette façon devrait fonctionner)

Consultez ce lien pour plus d'informations

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

1

Vous devriez envisager d'utiliser le moteur d'évaluation d'expression qui fait partie de Windows Workflow Foundation. L'évaluateur et le concepteur peuvent tous deux être utilisés séparément de WF.

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

Merci pour les conseils! Après un peu plus expérimenter, basée sur l'aide de Brummo, cela semble fonctionner:

txtEx contient ce texte:

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

puis

sc.AddCode (txtEx.Text);

et

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

Ce n'est pas idéal, car je voulais vraiment évaluer une expression, sans bâtiment, le chargement et l'évaluation d'une fonction. (Je suis surpris que IIF ne fonctionne pas pour une ligne simple si évaluation).

+0

Méfiez-vous d'un 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); 
} 
Questions connexes