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 :

Valeur par défaut d'un type non connu à l'avance


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 188
    Par défaut Valeur par défaut d'un type non connu à l'avance
    Bonjour,
    Je cherche à connaitre la valeur par défaut d'un type sans connaitre à l'avance le type.

    Je sais que lorsqu'on le connait, c'est par exemple ou plus simplement
    Mon soucis est que je ne sais pas à l'avance sur quel type je vais devoir le faire du coup, je cherche à le faire à partir de l'objet Type à peu près comme ceci
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    default(MaVariable.GetType())

    J'ai beau chercher, je ne trouve pas comment faire car la première situation m'est constamment présentée.

    Une idée ?

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 667
    Par défaut
    Bonjour,

    Quand j'entends "type non connu à l'avance", j'entends générique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public T GetDefaultValue<T>()
    {
       return default(T);
    }
    Utilisations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var entier = GetDefaultValue<int>();
    var chaine = GetDefaultValue<string>();
    var objet = GetDefaultValue<TaClasse>();
    A moins que ça soit autre chose dont tu aies besoin ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 188
    Par défaut
    Bonjour,
    Merci pour ta réponse que j'ai également codé mais je ne peux pas utiliser ce code car je dois définir T dans mon code alors que je ne le connais pas justement sinon je l'aurai utilisé comme décrit au début de mon poste.

    Vraiment, je souhaite donner le type par GetType() (donc une instance d'objet Type) et récupérer sa valeur par défaut => GetDefaultValue(MaVariable.GetType())

  4. #4
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 667
    Par défaut
    Bonjour,

    Du coup si j'ai bien compris, tu as besoin de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static object GetDefaultValue(Type type)
    {
       return Activator.CreateInstance(type);
    }
    Et la version générique qui économise un .GetType() si jamais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static T GetDefaultValue<T>(T obj)
    {
       return Activator.CreateInstance<T>();
    }
    Attention cependant ce n'est pas complet, par exemple si tu mets un string il fera la tronche, il faudra alors quelques vérifications en +. Mais ça marche pour tout le reste.

    Si jamais ce n'est toujours pas ça, un petite exemple serait le bienvenu.

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 188
    Par défaut
    Bonjour PixelJuice,
    Sur le fond c'est exactement ça que je cherche (et que j'avais également trouvé) mais effectivement, je n'ai pas précisé que cela devait fonctionner avec tous les types dont le string justement et les non nullables comme bool, int ou encore KeyPair(T, U) etc... C'est, j'imagine, l'adaptation dont tu parlais...

    D'ailleurs, tant que je suis sur le string, pourquoi cela ne fonctionne pas pour le string en particulier car c'est pourtant une classe et pas un type non nullable ?

    Merci de t'intéresser à mon sujet

  6. #6
    Expert confirmé

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

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Un truc 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
    31
    32
    33
    34
    35
    public class Program
    {
    	public static void Main(string[]args)
    	{
    		object o;
     
    		o = 3;
    		Console.WriteLine("int: {0}", GetDefaultValue(o.GetType()));
     
    		o = true;
    		Console.WriteLine("bool: {0}", GetDefaultValue(o.GetType()));
     
    		o = DateTime.Now;
    		Console.WriteLine("DateTime: {0}", GetDefaultValue(o.GetType()));
     
    		o = "";
    		Console.WriteLine("string: {0}", GetDefaultValue(o.GetType()));
     
    		o = new Program();
    		Console.WriteLine("Program: {0}", GetDefaultValue(o.GetType()));
     
    	}
     
    	public static object GetDefaultValue(Type type)
    	{
    		if (type.IsClass)
    		{
    			return null;
    		}
    		else
    		{
    			return Activator.CreateInstance(type);
    		}
    	}
    }
    Bon, j'avoue que ne connaissant pas le contexte, je n'arrive pas à me faire une idée d'une situation où cela pourrait être utile...

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/01/2019, 11h45
  2. Réponses: 4
    Dernier message: 20/06/2012, 11h03
  3. Comment récupérer la valeur par défaut d'un type ?
    Par Jérôme Lambert dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 27/02/2007, 10h30
  4. [MySQL] Valeur par défaut d'un type ENUM
    Par aliasjcdenton dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/10/2004, 20h44
  5. Réponses: 2
    Dernier message: 18/10/2003, 14h42

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