Meilleur et le plus court chemin pour évaluer des expressions mathématiques
Il existe de nombreux algorithmes pour évaluer des expressions, par exemple:
Est-il possible d'évaluer une expression mathématique à l'aide de C# .net la réflexion ou l'autre moderne .net de la technologie?
- J'ai posé une question similaire a tout à l'arrière. Vous pouvez regarder quelques unes de ces réponses: stackoverflow.com/questions/234217/...
- Avez-vous trouvé un moyen de relier les variables utilisées dans le reste de la "statique/pré-compilé" code?
Vous devez vous connecter pour publier un commentaire.
Suite à la réponse de Thomas, il est possible d'accéder à l' (obsolète) JScript bibliothèques directement à partir de C#, ce qui signifie que vous pouvez utiliser l'équivalent de JScript du
eval
fonction.C'est certainement possible. Le CodeSnippetCompileUnit classe ne fondamentalement, c'.
Je vous ai écrit quelques exemples d'utilisation du code. Vous aurez besoin d'inclure ces espaces de noms:
Voici le code:
Remplacer "paramètres" et "l'expression" par quoi que ce soit, et vous avez vous-même une expression générale de l'évaluateur.
Si vous obtenez une erreur FileNotFoundException dans les résultats.CompiledAssembly, puis l'extrait réussi à compiler.
Vous pouvez également jeter un oeil à ce Système.CodeDom.CodeSnippetExpression classe. Il est utilisé pour plus spécifiquement la lecture des expressions, mais une expression en elle-même ne peut pas être compilé, vous devez utiliser plus CodeDom de construire un travail de classe et de méthode autour d'elle. Ceci est utile si vous voulez être en mesure de manipuler par programmation de ce genre de classe que vous générez. CodeSnippetCompileUnit est agréable de générer un ensemble de la classe ouvrière à la fois (et la plus simple pour un exemple), mais à manipuler que vous avez à faire qui dérange les manipulations de chaînes.
Bien que l'utilisation du compilateur services est une solution simple et efficace, elle pose de sérieux problèmes de sécurité si l'expression est entré par l'utilisateur, car il pourrait exécuter presque rien.
Il y a une autre solution très simple qui est beaucoup plus sécurisé : profiter de la JScript
Eval
fonction. Il vous suffit de suivre ces étapes :Créer un fichier nommé js JsMath.js :
Compiler dans une bibliothèque de classe :
De référence de la JsMath bibliothèque dans votre projet C#, et de l'utiliser comme ça :
eval
fonction directement à partir de C#, et sans l'intermédiaire JScript étape de compilation. Voir ma réponse pour plus de détails.eval()
fonction peut ne pas fonctionner.Pour moi, Vici.Analyseur fonctionne très bien: découvrez-le ici , c'est le plus flexible analyseur d'expression que j'ai trouvé jusqu'à présent.
(nous l'avons utilisé pour créer des " lisible par l'homme d'affaires des règles, avec des données fournies par une base de données SQL server)
Exemples sont disponibles et il y a un très bon soutien par le développeur (consultez le site web du forum).
ncalc est le meilleur. vous pouvez le trouver dans codeplex également en pépite.
NCalc est une des expressions mathématiques évaluateur dans .NET. NCalc peut analyser n'importe quelle expression et d'évaluer le résultat, y compris en statique ou en dynamique des paramètres et des fonctions personnalisées.
Je pense que c'est le meilleur moyen de tous. Petar Repac réponse est incroyable.
À l'aide de l'expression, de l'argument de l'objet DataColumn résout incroyablement et facilement le sujet: