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 :

Conversion et type générique


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 208
    Par défaut Conversion et type générique
    Bonjour,

    Je souhaite écrire une fonction générique qui convertit un objet en objet de type générique.
    J'ai donc écrit la fonction suivante :

    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
    private T Convert<T>(object oValue)
    {
    	T tValue = default(T);
    	try
    	{
    		tValue = (T)oValue;
    	}
    	catch(InvalidCastException iceException)
    	{
    		if(typeof(T) == typeof(int))
    			tValue = (T)System.Convert.ToInt32(oValue);
    		else if(typeof(T) == typeof(double))
    			tValue = (T)System.Convert.ToDouble(oValue);
    		else
    			throw iceException;
    	}
    	return tValue;
    }
    Mais j'ai l'erreur du compilateur suivante :
    Impossible de convertir le type 'int' en 'T'
    sur l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tValue = (T)System.Convert.ToInt32(oValue);
    Y'a t'il un moyen pour faire cela?
    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 114
    Par défaut
    Bonjour,

    pourquoi ne pas utiliser la méthode générique de convert plutot qu'une méthode pour un type précis ?

    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
    private T Convert<T>(object oValue)
    {
    	T tValue = default(T);
    	try
    	{
    		tValue = (T)oValue;
    	}
    	catch(InvalidCastException iceException)
    	{
    		if(typeof(T) == typeof(int))
    			tValue = (T)System.Convert.ChangeType(oValue, typeof(int));
    		else if(typeof(T) == typeof(double))
    			tValue = (T)System.Convert.ChangeType(oValue, typeof(double));
    		else
    			throw;
    	}
    	return tValue;
    }
    Aussi, si dans un catch tu veux laisser la propagation d'une exception (comme ici), utilise juste throw; pour garder la StackTrace initiale.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 208
    Par défaut
    Super!!

    Je ne connaissais pas cette méthode

    Merci

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

Discussions similaires

  1. Conversion vers un type générique
    Par Flamby38 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 16/03/2009, 14h53
  2. Conversion de type
    Par sovitec dans le forum Langage
    Réponses: 5
    Dernier message: 15/12/2004, 14h29
  3. Conversion de type
    Par poirier dans le forum ASP
    Réponses: 2
    Dernier message: 06/07/2004, 10h30
  4. [MYSQL] conversion de type sur import de script
    Par sebos63 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 27/08/2003, 10h00
  5. Réponses: 2
    Dernier message: 05/06/2002, 12h29

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