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 :

int en short long [Débutant]


Sujet :

C#

  1. #1
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 : 4 147
    Points : 7 392
    Points
    7 392
    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 : 168
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 éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 : 4 147
    Points : 7 392
    Points
    7 392
    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
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    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 / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    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 éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 : 4 147
    Points : 7 392
    Points
    7 392
    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 chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 896
    Points : 1 912
    Points
    1 912
    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
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    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 avec Java
    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