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 :

Optimisation du code


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Par défaut Optimisation du code
    Bonjour,

    Sur un projet dont je dois modifier le code existant, je suis tombé sur un truc qui m'a piqué les yeux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
                if (string.Contains("stringA")) nombre = 1;
     
                else
                {
                    if (string.Contains("stringB")) nombre = 2;
     
                    else
                    {
                        if (string.Contains("stringC")) nombre = 3;
     
                        else
                        {
                            if (string.Contains("stringD")) nombre = 4;
     
                            else
                            {
                                if (string.Contains("stringE")) nombre = 5;
     
                                else
                                {
                                    if (string.Contains("stringF")) nombre = 6;
     
                                    else
                                    {
                                        if (string.Contains("stringG")) nombre = 7;
     
                                        else
                                        {
                                            if (string.Contains("stringH")) nombre = 8;
     
                                            else
                                            {
                                                if (string.Contains("stringI")) nombre = 9;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
    Existe-t-il un moyen de faire autrement ?

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Ça dépend de ce que tu appelles "optimisation".
    Je suppose que tu parles d'optimiser la quantité et la qualité du code : tu peux refactoriser ce type de chose qui est relativement récurrente; personnellement j'en suis venu à cette approche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private static readonly IDictionary<string, int> mapping = new Dictionary<string, int>
    {
        { "stringA", 1 },
        { "stringB", 2 },
        { "stringC", 3 },
        { "stringD", 4 },
        // ...
        { "stringI", 9 }
    };
     
    static int GetIntValue(string @string)
    {
        return mapping.First(p => @string.Contains(p.Key)).Value;
    }
    Ça vaut ce que ça vaut mais j'en suis satisfait et je n'ai pas jusqu'à présent trouvé mieux (en même temps je n'ai pas vraiment cherché ).

  3. #3
    Membre éprouvé Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Par défaut
    Merci, mais avec le framework 4.0, j'obtiens cette erreur : "System.Collections.Generic.IDictionary<string,int>' ne contient pas une définition pour 'first' et aucune méthode d'extension 'first' acceptant un premier argument de type 'System.Collections.Generic.IDictionary<string,int>' n'a été trouvée"

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Il doit te manquer ceci :
    J'imagine que tu es soigneux et fait en sorte de virer les using inutilisés.

  5. #5
    Membre éprouvé Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Par défaut
    Citation Envoyé par Pragmateek Voir le message
    J'imagine que tu es soigneux et fait en sorte de virer les using inutilisés.
    En effet, je fais régulièrement ce genre de "ménage".

    Par contre, using System.Linq; ne marche pas, ni System.Data.linq

  6. #6
    Membre éclairé Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 374
    Par défaut
    bonjour

    Et avec le using System.Collections.Generic; ?

    edit : le comentaire en dessous est la réponse pour utiliser le System.Linq

  7. #7
    Invité
    Invité(e)
    Par défaut
    Assures-toi d'avoir ajouté la référence à l'assembly System.Core.dll.

  8. #8
    Membre éprouvé Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Par défaut
    @stolx_10 : Je l'utilise déjà pour d'autres trucs

    @h2s84 : Dixit Visual Studio, "un référence a System.Core n'a pas pu être ajoutée. Ce composant est déjà automatiquement référencé par le système de génération"


    Quand je dis que "Using System.Linq" et "using System.Data.linq" ne "marches pas", ça veut dire que les ajouter ne résous rien.

  9. #9
    Membre éclairé Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 374
    Par défaut
    C'est bizarre.

    j'ai copié le bout de code, ajouté System.Core est présent dans mes références. Pas d'erreur de compilation....

    projet sous Framework 4.0 également

  10. #10
    Membre éprouvé Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Par défaut
    Citation Envoyé par stolx_10 Voir le message
    System.Core est présent dans mes références.
    Pas dans mon projet, le souci doit venir de là. Mais quand j'essaye de l'ajouter "manuellement", j'ai le message précédemment cité.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Mets-nous le code complet ou crée un fichier .zip du projet et envoie

  12. #12
    Membre éclairé Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 374
    Par défaut
    Ok, j'ai compris le pourquoi du comment.

    Tu as dû supprimer par le passé cette référence dans ton projet pensant que tu ne l'utilisais pas. Quand tu essaies de le rajouter, tu as ce beau message d'erreur.
    Je le sais car je viens de faire la manip .

    Du coup, je suis dans le même cas que toi

  13. #13
    Membre éprouvé Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Par défaut
    Citation Envoyé par stolx_10
    Tu as dû supprimer par le passé cette référence dans ton projet pensant que tu ne l'utilisais pas.
    Ce n'est pas mon projet, je reprends un projet déjà existant, quelqu'un d'autre a dû le faire et maintenant je suis coincé avec mon code de départ

    Citation Envoyé par h2s84
    Mets-nous le code complet ou crée un fichier .zip du projet
    Je ne peux pas faire ça pour des raisons de confidentialités et aussi car ce "projet" fait partie d'une "solution" Visual Studio avec 5 autres "projets".

  14. #14
    Membre éclairé Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 374
    Par défaut
    Quitte ton projet.

    Edit avec BlocNotes le fichier *.csproj de ton projet et ajoute la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Reference Include="System.Core" />
    dans le paquet contenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
      <ItemGroup>
        <Reference Include="DataGridViewAutoFilter">
          <HintPath>C:\Users\mon_compte\Desktop\DataGridViewAutoFilter\DataGridViewAutoFilter\CS\DataGridViewAutoFilter\DataGridViewAutoFilter\bin\Debug\DataGridViewAutoFilter.dll</HintPath>
        </Reference>
        <Reference Include="System" />
        <Reference Include="System.Xml.Linq" />
        <Reference Include="System.Core" /> 
        <Reference Include="System.Data.DataSetExtensions" />
        <Reference Include="Microsoft.CSharp" />
        <Reference Include="System.Data" />
        <Reference Include="System.Deployment" />
        <Reference Include="System.Drawing" />
        <Reference Include="System.Windows.Forms" />
        <Reference Include="System.Xml" />
      </ItemGroup>
    Ca devrait être bon, car moi c'est réapparu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 08h41
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

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