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 :

Les nombres en C#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut Les nombres en C#
    Bonjour,

    Existe-t-il une superclass ou superinterface en c# englobant tous les type numeriques? (au modèle de la classe Number de java)

    Je dois faire un test sur le type d'une variable :

    if(typeof(CeQUeJeCherche).IsAssignableFrom(MaVariable.GetType))
    "faire qql chose";
    else "faire autre chose";

    PS : Les expressions régulières ne m'arrange pas car je n'ai pas directement accès à la valeur de ma variable...

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Non pas de classe de base pour les types numériques. Il va te falloir coder une méthode pour déterminer si le type est numérique ou non.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Ok c'est bien ce qu'il me semblait...
    Je suis déjà dessus

    Merci

  4. #4
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Salut,
    sans te faire ch...r à farfouiller le type de la variable, tu peux utiliser une classe utilitaire qui aurait la collection exhaustive des types numériques en champ + exposerait une méthode statique, voire une extension du style :
    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
     
    static class NumberCheckHelper
    {
        private readonly IList<Type> _numericTypes = new List<Type>
        {
            typeof(byte),
            typeof(decimal),
            typeof(long),
            typeof(int),
            typeof(double),
            typeof(uint),
            typeof(sbyte)
            etc...
            ...
        }
     
        public static bool IsANumber(this object objectToCheck)
        {
            return objectToCheck != null && _numericTypes.Contains(objectToCheck.GetType());
        }
    }

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Afin de pouvoir utiliser la meme méthode dans tout mon programme (pour les type numériques et non j'ai finalement fait quelques chose comme ça :

    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
     
        public class LyCsType
        {
            public static bool IsAssignableFrom(Type parent, Type child)
            {
                if (typeof(LyCsNumber).Equals(parent))
                    return LyCsNumber.IsAssignableFrom(child);
                return parent.IsAssignableFrom(child);
            }
        }
     
        public class LyCsNumber
        {
            public static bool IsAssignableFrom(Type child)
            {
                if (typeof(uint).IsAssignableFrom(child) ||
                    typeof(int).IsAssignableFrom(child) ||
                    typeof(short).IsAssignableFrom(child) ||
                    typeof(long).IsAssignableFrom(child) ||
                    typeof(float).IsAssignableFrom(child) ||
                    typeof(double).IsAssignableFrom(child) ||
                    typeof(decimal).IsAssignableFrom(child) ||
                    typeof(sbyte).IsAssignableFrom(child) ||
                    typeof(ulong).IsAssignableFrom(child) ||
                    typeof(ushort).IsAssignableFrom(child) ||
                    typeof(byte).IsAssignableFrom(child))
                    return true;
                return false;
            }
        }
    Ce qui, je suppose, ce rapproche de ton idée MetalGeek, en mettant un _numericTypes.Contains(child) dans la condition de IsAssignableFrom(Type child)

    Merci pour votre aide!

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

Discussions similaires

  1. [MS-DOS] Compter les nombres de jours entre deux dates diffé
    Par Furius dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 19/02/2006, 13h33
  2. problème avec les nombres à virgule
    Par shingo dans le forum Langage
    Réponses: 3
    Dernier message: 16/01/2006, 18h30
  3. Réponses: 24
    Dernier message: 27/09/2005, 21h16
  4. Les nombres complexe et delphi
    Par wikers dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2005, 11h47

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