Utilisez Microsoft Script de contrôle pour évaluer 'Si' les expressions (via c #)
-
23-08-2019 - |
Question
J'ai quelques c # code qui utilise le Microsoft Script de contrôle pour évaluer certaines expressions:
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 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 bien
Mais comment puis-je évaluer un simple « si »? J'ai essayé "si (true, 2, 3)", "ssi (true, 2, 3)", "si (true) puis 2 autres 3" et "si (true) puis 2 autres 3 endif"
Quelqu'un peut-il me s'il vous plaît aider à évaluer les expressions conditionnelles simples? Toute aide appréciée!
RH
La solution
Essayez d'envelopper votre IF-expression dans une fonction
Function test
if (true) then
return true
else
return false
end if
End function
Ajoutez 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 certains plus d'informations
Autres conseils
Vous devriez envisager d'utiliser le moteur d'évaluation d'expression qui fait partie de Windows Workflow Foundation. Tant l'évaluateur et le concepteur pour il peut être utilisé séparément de 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);
}
Merci pour les conseils! Après un peu plus expérimentant, basé 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 IIF ne fonctionne pas pour une ligne simple, si l'évaluation).