2010-04-15 7 views
4

J'essaie d'analyser la formule en langage C# commeParse formules dans .NET

"5*3 + 2" 
"(3*4 - 2)/5" 

Est-il possible de le faire en C# ou des scripts comme VBScript, JavaScript (qui sera appelé C# programme).

Répondre

2

Il y a un truc que j'ai utilisé auparavant pour faire ce genre de chose en C#, qui est d'utiliser la fonction eval de JScript.NET. Vous trouverez le code complet dans ma réponse au this question. Il ne repose pas sur un langage de script tel que VBScript ou JavaScript, il est pur .NET et l'implémentation que j'utilise génère un assemblage JScript.NET à la volée à partir du code C#, il n'est donc pas nécessaire de mélanger les langues dans votre solution.

+0

Merci David, c'est ce que je veux. – Cool

4

J'ai eu une grande expérience avec Flee, une bibliothèque C# qui évalue des expressions telles que celle que vous avez décrite. Vous pouvez évaluer les expressions comme des instructions fortement typées, donc si vous vouliez un entier, par exemple, "(1 + 2) * 5" serait correct mais "bonjour monde" ne le serait pas.

Vous pouvez même ajouter des variables ou des fonctions spécifiques. Le Flee examples page est un excellent point de départ.

+0

Merci Mark. Mais flee doit être téléchargé, donc je préfère JScript.Net. – Cool

+0

Il s'agit en fait d'une bibliothèque VB.NET. J'ai paniqué quand j'ai regardé la source pour essayer de comprendre certains problèmes que j'avais! – xyz

+0

+1 à Flee - J'ai évalué plus de 50K expressions en 4 minutes. Les expressions n'étaient pas complexes, seulement l'arithmétique, et quelques vérifications nulles – Zasz

1

J'ai utilisé avec succès l'exemple Dynamic Linq de Microsoft pour formuler de façon dynamique des expressions qui utilisent des types sous System.Linq.Expressions namespace. Cela fonctionne très bien pour moi et me permet d'utiliser une syntaxe C# plus naturelle à la place des expressions par défaut ActiveReports.