none
La fonction EvalueExpression est introuvable RRS feed

Réponses

Toutes les réponses

  • Bonjour,

    Je ne la trouve pas non plus dans l'explorateur d'objets donc je dirais quelle n'existe vraiment pas. Ou peut-être EvaluateExpression :

    http://msdn.microsoft.com/fr-fr/library/system.web.compilation.expressionbuilder.evaluateexpression.aspx

    Ou si on veut évaluer une expression simple, une technique que j'aime bien est d'utiliser une colonne Expression dans un DataTable (les deux autres sont d'utiliser une fonction dans J# ou de compiler du code).

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse Louis LERMITE mardi 22 novembre 2011 19:41
    mardi 22 novembre 2011 18:35
    Modérateur
  • Merci de ta réponse.

    Ce n'est pas normal, ça existe dans l'intellisense de l'IDE, ça précise juste que 

    EvalueExpresion n'est pas déclaré, il peut être inaccessible en raison de son niveau de détection.

    De plus ça existe en VBA sous la propriété Evaluate qui fonctionne très bien.

    Le lien que tu mentionne répond bien à l'expression mais elle ne fait pas du tout ce dont je pensais, en fait en VBA Evaluate("12*333/5") renvoi le résultat quelque soit la complexité de l'expression.
    Mais bah, c'est pas grave, j'ai presque terminer l'équivalent en .Net.

    Encore merci.

    Cordialement

    Louis. 

     

    mardi 22 novembre 2011 19:39
  • Je confirme que cette classe ne fait pas partie de .Net ou du moins elle est bien caché et n'est pas publique. Sur quel objet faites vous le EvalueExpression ? Un bout de code serait apprécié car aprèes divers recherches sur le web il n'y a rien d'équivalent.

    Il y a des bibliothèques gratuites pour cela sur Codeplex: http://ncalc.codeplex.com/http://flee.codeplex.com. 


    Microsoft MVP C# || gabrielmongeon.com || LinkedIn
    mardi 22 novembre 2011 20:17
    Modérateur
  • Justement, je ne fais pas cela sur un objet mais sur une variable String

    Dim MyVar as Double= CDbl(Evaluer("((344 * 25 + 15)/ (32-10)) * 22.71")

    Evaluer fait le tri des parenthèses

    La deuxième fonction, EvalueExpression  fait le tri des opérations * / + - etc..

    Et, je pense que mon problème ( et ma bêtise)  proviennent du fait que j'ai mis la fonction

    EvalueExpression en public au lieu de private,

    Elle se retrouve donc dans l'intelliSense et ce qui m'a induit en erreur c'est, comme dis plus haut, parce que la fonction Evaluate existe de la même façon en VBA, bref, je me suis mélangé les pinceaux.

    Et la troisième fonction CalculSimple renvoi le résultat de 1 nombres qui est le quotient de un ou deux nombres simples.

    Veuillez m'excusé pour ce dérangement inutile et la perte de temps.

    Cordialement.

    Louis

    mardi 22 novembre 2011 20:55
  • Bonjour,

     

    Yaka découper c'est plus clair qu'avec Excel :

    x = (12*333) / 5
     
    

    Cordialement :o)



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    mercredi 23 novembre 2011 09:44
  • Justement, je ne fais pas cela sur un objet mais sur une variable String

    Dim MyVar as Double= CDbl(Evaluer("((344 * 25 + 15)/ (32-10)) * 22.71")

    Evaluer fait le tri des parenthèses

    La deuxième fonction, EvalueExpression  fait le tri des opérations * / + - etc..

    Et, je pense que mon problème ( et ma bêtise)  proviennent du fait que j'ai mis la fonction

    EvalueExpression en public au lieu de private,

    Elle se retrouve donc dans l'intelliSense et ce qui m'a induit en erreur c'est, comme dis plus haut, parce que la fonction Evaluate existe de la même façon en VBA, bref, je me suis mélangé les pinceaux.

    Et la troisième fonction CalculSimple renvoi le résultat de 1 nombres qui est le quotient de un ou deux nombres simples.

    Veuillez m'excusé pour ce dérangement inutile et la perte de temps.

    Cordialement.

    Louis

    Pas de problème, on a tous fait cela au moins une fois (et moi plus d'une fois ;) )! 
    Microsoft MVP C# || gabrielmongeon.com || LinkedIn
    mercredi 23 novembre 2011 13:36
    Modérateur
  • Ok. Sinon on peut donc se baser sur un DataTable ce qui permet de faire qq chose comme (non testé) :

    Function Eval(ByVal Formule As string) As Integer
    Dim t As new DataTable
    ' Contexte éventuel
    t.rows.Add("a",GetType(Integer))
    t.rows.Add("b",GetType(Integer))
    t.rows.Add("Result",GetTYpe(Integer),Formule)
    t.rows.Add(5,10)
    return Cint(t.Rows(0)("Result"))
    End Function

    Et donc d'appeler qq chose comme Eval("a*b+2*3"). Le principe est que le DataTable permet de définir une colonne qui est une expression calculée éventuellement à partir d'autre colonne du DataTable. On peut donc réutiliser cette possibilité pour évaluer une expression dans les limites permises (http://msdn.microsoft.com/fr-fr/library/system.data.datacolumn.expression.aspx)

     

     

     

     

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mercredi 23 novembre 2011 15:09
    Modérateur