IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Récupérer une expression en C# dans une string


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 8
    Par défaut Récupérer une expression en C# dans une string
    Bonjour à tous,

    Je voudrais savoir si il existe un moyen de récupérer une expression, un bout de code en C#, dans une string exploitable au runtime, un peu comme en C++ lorsque l'on préfixe du code avec # ?

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    string expression = GetExpressionString(1 + 2);
    System.Console.WriteLine(expression);
     
    // Output:
    // 1 + 2
    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Euh... j'ai rien compris à ce que tu veux faire
    Pourquoi ne pas utiliser une chaine "1 + 2" ?
    Peux-tu expliquer plus précisément ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 8
    Par défaut
    Désolé c'est pas très clair c'est vrai

    Imaginons que je veuille par exemple développer ma propre méthode Assert.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public static class Debug
    {
      public static void Assert(bool expression)
      {
        if (!expression)
          // Affiche expression dans la console
      }
    }
    Je voudrais par exemple que celle-ci affiche un message d'erreur dans la console lorsque expression n'est pas vérifiée. Et je voudrais pouvoir visualiser expression.

    Si je fais par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int i = 2;
    // Vérifie que mon nombre est impair
    Debug.Assert((i & 1) = 1);
    La sortie serait :
    Failed assertion : (i & 1) = 1.

    Voilà l'exemple pratique. Plus généralement je voudrais donc savoir si il existe un moyen en C# de récupérer une expression sous forme de string.

    J'espère que j'ai été plus clair
    Merci.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Quand Assert reçoit expression sous forme de bool, celui-ci est déjà évalué, il n'y a plus de trace de la "formule" originale.
    Ce serait possible si Assert récupérait expression sous forme de chaine et l'évaluait... mais c'est difficile (voire impossible) à réaliser.
    A la rigueur tu peux passer 2 paramètres à Assert : un bool et une chaîne...

  5. #5
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Ce doit être possible de récupérer l'expression en la passant sous forme d'expression tree. De là tu devrais pouvoir passer par une lambda expression au runtime qui devrait (encore une fois) être transformée par le compilateur en un expression tree.
    Mais bon... Ce serait compliqué...
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 8
    Par défaut
    Ça deviendrait un peu compliqué donc je vais laisser tomber.
    Dommage que .Net ne propose pas plus de directives préprocesseur, ça peut être bien pratique dans certains cas, m'enfin ...

    Merci pour la réponse en tout cas

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  2. Réponses: 1
    Dernier message: 03/11/2010, 11h41
  3. Réponses: 3
    Dernier message: 02/09/2007, 21h16
  4. Réponses: 5
    Dernier message: 02/10/2006, 19h24
  5. Réponses: 17
    Dernier message: 02/08/2006, 15h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo