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 :

Comment simplifier ce code ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 35
    Par défaut Comment simplifier ce code ?
    Bonjour,

    Les 2 méthodes ci-dessous font la même chose, mais j'ai du en créer 2 car j'ai 2 appels de fonctions different : Func<int, double> et Func<int, DateTime, double>.

    Existe-t-il une manière de réécrire cela de manière à ne garder plus qu'une seule procédure ?

    Merci beaucoup.

    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
            public static double SumItem(Func<int, double> method, int startPeriodIncluded, int endPeriodIncluded)
            {
                double sumItem = 0;
                for (int j = startPeriodIncluded; j < endPeriodIncluded + 1; j++)
                {
                    sumItem += method(j);
                }
                return sumItem;
            }
     
            public static double SumItem(Func<int, DateTime, double> method, int startPeriodIncluded, int endPeriodIncluded, DateTime refinancingDate)
            {
                double sumItem = 0;
                for (int j = startPeriodIncluded; j < endPeriodIncluded + 1; j++)
                {
                    sumItem += method(j, refinancingDate);
                }
                return sumItem;
            }

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Tout dépend de ce que font les méthodes passées en paramètre.
    Mais, il est bizarre de voir une méthode statique attendre un pointeur de méthode.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 35
    Par défaut
    Bonjour,

    Vous trouverez ci-dessous les méthodes passées en paramètres. Ce sont de simples calculs de dates. Oui, j'apprends sur le tas et j'ai bien conscience que mon code doit contenir beaucoup de choses peu orthodoxes...

    Bien à vous,




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public virtual DateTime PeriodDate(int p)
            {
                return DateTimeUtils.PeriodDate(this, p);
            }
     
    public virtual DateTime PeriodDate(int p, DateTime refinancingDate)
            {
               return DateTimeUtils.PeriodDate(this, p, refinancingDate);
            }
    Elles appellent :

    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
    static public DateTime PeriodDate(FinancialInstrument financialInstrument, int p)
            {
                DateTime issueDate = DateOnly(financialInstrument.IssueDate);
                int fiFrequency = financialInstrument.FiFrequency; 
                return issueDate.AddMonths(p * fiFrequency);
            }
     
    static public DateTime PeriodDate(FinancialInstrument financialInstrument, int p, DateTime refinancingDate)
            {
                int totalNbOfPeriods = financialInstrument.TotalNbOfPeriods;
                DateTime nDate = PeriodDate(financialInstrument, totalNbOfPeriods);
                DateTime pDate = PeriodDate(financialInstrument, p);
                DateTime refiDate = DateOnly(refinancingDate);
     
                if (refiDate <= nDate)
                {
                    if (pDate < refiDate & pDate < nDate)
                    {
                        return pDate;
                    }
                    else
                    {
                        return refiDate;
                    }
                }
                else
                {
                    return pDate;
                }
            }

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    En ne faisant qu'une seule méthode static PeriodDate prenant un Nullable<DateTime> tu devrais pouvoir n'avoir qu'une seul méthode virtuelle PeriodDate avec un Nullable<DateTime> et donc un seule méthode SumItem avec un Nullable<DateTime>.
    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
    static public DateTime PeriodDate(FinancialInstrument financialInstrument, int p, Nullable<DateTime> refinancingDate)
    {
         if (refinancingDate.HasValue) 
        {
     
                int totalNbOfPeriods = financialInstrument.TotalNbOfPeriods;
                DateTime nDate = PeriodDate(financialInstrument, totalNbOfPeriods);
                DateTime pDate = PeriodDate(financialInstrument, p);
                DateTime refiDate = DateOnly(refinancingDate.Value);
     
                if (refiDate <= nDate)
                {
                    if (pDate < refiDate & pDate < nDate)
                    {
                        return pDate;
                    }
                    else
                    {
                        return refiDate;
                    }
                }
                else
                {
                    return pDate;
                }
          }
          else
         {
                DateTime issueDate = DateOnly(financialInstrument.IssueDate);
                int fiFrequency = financialInstrument.FiFrequency; 
                return issueDate.AddMonths(p * fiFrequency);
         }
     }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public virtual DateTime PeriodDate(int p, Nullable<DateTime> refinancingDate)
    {
         return DateTimeUtils.PeriodDate(this, p, refinancingDate);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            public static double SumItem(Func<int, Nullable<DateTime>, double> method, int startPeriodIncluded, int endPeriodIncluded, Nullable<DateTime> refinancingDate)
            {
                double sumItem = 0;
                for (int j = startPeriodIncluded; j < endPeriodIncluded + 1; j++)
                {
                    sumItem += method(j, refinancingDate);
                }
                return sumItem;
            }

  5. #5
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Je ne sais pas exactement ce à quoi correspond ton code, mais je me demande si tu ne réécrits pas des choses qui existent déjà sur les dates.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 35
    Par défaut
    @popo : merci je vais tester ça. Je pensais que le Delegate pouvait m'apporter une solution, mais de ce que j'en comprends, ça fonctionne comme un Func<>, donc a priori non

    @Noxen : c'est possible, ça ne m'étonnerait pas. Comme dit, j'apprends sur le tas... Pourrais-tu expliciter que je comprenne l'erreur potentielle ?

Discussions similaires

  1. Comment simplifier mon code javascript?
    Par Nighthawk dans le forum jQuery
    Réponses: 2
    Dernier message: 15/07/2015, 10h15
  2. Comment simplifier ce code en une fonction simple ?
    Par roleca dans le forum Langage
    Réponses: 10
    Dernier message: 05/09/2014, 17h31
  3. comment simplifier ce code ?
    Par laurentSc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 09/09/2013, 19h38
  4. [XL-2007] Comment simplifier mon code VBA SVP?
    Par anthooooony dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/02/2012, 10h59
  5. Réponses: 4
    Dernier message: 10/05/2008, 12h31

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