122 votes

c# de l'évaluation de la chaîne "3*(4+2)" rendement int 18

Est-il fonction de la de la .Net framework qui permet d'évaluer un numering expression contenue dans une chaîne de caractères et de retourner le résultat numérique? C'est à dire:

string mystring = "3*(2+4)";
int result = EvaluateExpression(mystring);
Console.Writeln(result);

imprimer 18.

Est-il une norme-cadre de la fonction que vous pouvez remplacer mon EvaluateExpression ?

197voto

Ramesh Sambari Points 109

Si vous voulez évaluer une expression de chaîne d'utiliser le code ci-dessous un extrait.

using System.Data;

DataTable dt = new DataTable();
var v = dt.Compute("3 * (2+4)","");

85voto

À l'aide du compilateur de faire implique des fuites de mémoire que les assemblys générés sont chargés et jamais publiée. Il est également moins performant que d'utiliser une expression réelle de l'interprète. Pour ce faire, vous pouvez utiliser Ncalc qui est une structure open-source avec ce uniquement l'intention. Vous pouvez également définir vos propres variables et des fonctions personnalisées, si ceux déjà inclus ne sont pas assez.

Exemple:

Expression e = new Expression("2 + 3 * 5");
Debug.Assert(17 == e.Evaluate());

52voto

Petar Repac Points 2429

Essayez ceci:

static double Evaluate(string expression) {
  var loDataTable = new DataTable();
  var loDataColumn = new DataColumn("Eval", typeof (double), expression);
  loDataTable.Columns.Add(loDataColumn);
  loDataTable.Rows.Add(0);
  return (double) (loDataTable.Rows[0]["Eval"]);
}

41voto

arul Points 10719

Oui, vous pouvez laisser compilateur C# de l'évaluer au moment de l'exécution.

Voir: CSharpCorner

16voto

Olav Botterli Points 111

Vous pourriez regarder "XpathNavigator.Évaluer" j'ai utilisé ce processus d'expressions mathématiques pour mon GridView et il fonctionne très bien pour moi.

Voici le code que j'ai utilisé pour mon programme:

public static double Evaluate(string expression)
{
    return (double)new System.Xml.XPath.XPathDocument
    (new StringReader("<r/>")).CreateNavigator().Evaluate
    (string.Format("number({0})", new
    System.Text.RegularExpressions.Regex(@"([\+\-\*])")
    .Replace(expression, " ${1} ")
    .Replace("/", " div ")
    .Replace("%", " mod ")));
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X