Discussion: int en short long [Débutant]

  1. #1
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    février 2010
    Messages
    3 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2010
    Messages : 3 033
    Points : 4 981
    Points
    4 981
    Billets dans le blog
    1

    Par défaut int en short long

    Désolé pour le titre, je deviens chèvre.

    Habitué au SQL, j'aime utiliser l'opérateur "x between y and z".

    J'ai donc développé la méthode d'extension suivante :
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static bool IsBetween<T>(this T item, T start, T end)
    {
            return Comparer<T>.Default.Compare(item, start) >= 0 && Comparer<T>.Default.Compare(item, end) <= 0;
    }

    C'est magique, maintenant je peux faire des int.IsBetween(int, int) et des long.IsBetween(long, long)

    Mais pas des short.IsBetween(short, short) !

    Voici ce qu'il me sort :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur	CS1929	'short' ne contient pas de définition pour 'IsBetween' et la meilleure surcharge de méthode d'extension 'Extensions.IsBetween<int>(int, int, int)' nécessite un récepteur de type 'int'	CRMStationsManager	E:\CRMStationsManager\CRMStationsManager\CRMStationCollection.cs	65	Actif
    Pourtant, si je passe la souris sur mla ligne en question, voici ce que j'ai comme aide contextuelle :
    Nom : intenshortlong.png
Affichages : 50
Taille : 5,7 Ko

    C'est encore mon Visual Studio qui déconne ou quoi ?
    On ne jouit bien que de ce qu’on partage.

  2. #2
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    février 2010
    Messages
    3 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2010
    Messages : 3 033
    Points : 4 981
    Points
    4 981
    Billets dans le blog
    1

    Par défaut

    Bon ben .NET n'est pas buggé qu'un peu...

    Voilà, ça ça marche :
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            public static bool IsBetween(this short item, short start, short end)
            {
                return Comparer<short>.Default.Compare(item, start) >= 0
                    && Comparer<short>.Default.Compare(item, end) <= 0;
            }

    Ça m'apprendra à vouloir faire du code générique !
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    avril 2007
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : avril 2007
    Messages : 12 833
    Points : 23 106
    Points
    23 106

    Par défaut

    en effet pour faire ca on utilise pas T
    et dans le framework aussi on trouve des méthodes identiques 10x si nécessaire avec des types différents, mais ce n'est pas bien long à écrire ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .Net et Delphi
    Inscrit en
    juillet 2002
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .Net et Delphi
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2002
    Messages : 634
    Points : 1 447
    Points
    1 447

    Par défaut

    Bonjour,

    Citation Envoyé par StringBuilder Voir le message
    Bon ben .NET n'est pas buggé qu'un peu...
    Pas vraiment. Maintenant, il pourrait faire un warning plutôt qu'une erreur. Un int rentre dans un long mais pas dans un short.
    En convertissant explicitement 6000 et 6999 en short, ça fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numStation.IsBetween((short)6000,(short)6999)
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    short num1 = 4;
    short num2 = 3;
    short num3 = 7;
    num1.IsBetween(num2, num3)
    Là, pas d'erreur !

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    février 2010
    Messages
    3 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2010
    Messages : 3 033
    Points : 4 981
    Points
    4 981
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par ebastien Voir le message
    Bonjour,



    Pas vraiment. Maintenant, il pourrait faire un warning plutôt qu'une erreur. Un int rentre dans un long mais pas dans un short.
    En convertissant explicitement 6000 et 6999 en short, ça fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numStation.IsBetween((short)6000,(short)6999)
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    short num1 = 4;
    short num2 = 3;
    short num3 = 7;
    num1.IsBetween(num2, num3)
    Là, pas d'erreur !
    Argh ! Bien vu !
    Du coup je vais réutiliser la fonction générique et passer par des constantes typées ! Ça m'apprendra à laisser des Magic Numbers dans mon code
    On ne jouit bien que de ce qu’on partage.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : juin 2007
    Messages : 367
    Points : 555
    Points
    555

    Par défaut

    Sur ce cas je crois que j'aurais testé en forçant le type pour voir ce que ça aurait donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numStation.IsBetween<short>(6000, 6999)
    D'ailleurs, pour avoir testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    short s = 10;
    s.IsBetween<short>(2, 10000); // 10000 est accepté comme un short
    s.IsBetween<short>(2, 100000); // 100000 est un int => impossible de convertir int en short
    var big = 100000;
    s.IsBetween<short>(2, big); // big est un int => impossible de convertir int en short
    s.IsBetween<short>(2, (short)big); // ça passe, mais à vos risque et périls
    Et pour éviter un cast incertain de short en int, on peut faire l'inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((int)s).IsBetween(2, big);

  7. #7
    Rédacteur/Modérateur

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juillet 2016
    Messages
    1 375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : juillet 2016
    Messages : 1 375
    Points : 4 688
    Points
    4 688
    Billets dans le blog
    5

    Par défaut

    A noter qu'il n'existe pas de suffixe pour typer directement un litéral en short. On est donc obligé de passer soit par une conversion, soit par une variable pour avoir un short...
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

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

Discussions similaires

  1. short long ?
    Par Bktero dans le forum C
    Réponses: 12
    Dernier message: 13/12/2013, 23h04
  2. Réponses: 26
    Dernier message: 19/08/2013, 18h08
  3. Convertir un unsigned int vers un long double
    Par dafpp dans le forum Débuter
    Réponses: 3
    Dernier message: 28/01/2012, 19h37
  4. choix int ou short
    Par RomG7 dans le forum Débuter
    Réponses: 4
    Dernier message: 17/11/2010, 17h13
  5. Réponses: 2
    Dernier message: 16/02/2006, 17h52

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