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 :

Générique et réflexion


Sujet :

C#

  1. #1
    Membre habitué Avatar de YodaOne
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 76
    Points : 139
    Points
    139
    Par défaut Générique et réflexion
    Bonjour à tous,

    Je cherche à faire ou plutot déclaré une ICollection<> et dont le type serait rendu par réflexion, le soucis est que je n'arrive pas à attribuer le type comme ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string nomtbl = "monnamespace.maclass";
    Type type = Type.GetType(nomtbl);
    ICollection<type> lsExport;
    Comment je peux faire cela ?

    Merci pour vos infos
    Bon Dev

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Voici un article MSDN qui répond à ta question

    Concrètement, ça se fait assez simplement. Cet exemple crée un objet de type List<string> :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var baseType = typeof(List<>);
    Type[] typeArgs = { typeof(string) };
    var genericType = baseType.MakeGenericType(typeArgs);
    var stringsCollection = Activator.CreateInstance(genericType);
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    J'ajouterai que si il veut le créer à partir d'un nom de type dans une chaine, il faut rajouter quelques lignes; dans le 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
    22
    23
    24
    25
    26
    static Type MakeGenericFromName(Type baseType, string genericParamTypeName)
    {
    	AssemblyName[] referencedAssemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies();
    	Type genericParamType = null;
    	foreach(AssemblyName aName in referencedAssemblies)
    	{
    		Assembly anAssembly = Assembly.Load(aName);
    		genericParamType = anAssembly.GetType(genericParamTypeName, false, true);
    		if(genericParamType != null) // trouvé !
    		{
    			return baseType.MakeGenericType(new Type[] { genericParamType });
    		}
    	}
    	return null; // pas trouvé !
    }
    static void Main(string[] args)
    {			
    	Type genericBuildedType = MakeGenericFromName(typeof(List<>), "System.String");
    	object myInstance = null;
    	if(genericBuildedType != null)
    	{
    		myInstance = Activator.CreateInstance(genericBuildedType);
    	}
    	Console.WriteLine("Mon Type {0}", myInstance != null ? myInstance.GetType().Name : " pas créé !");
    	Console.ReadKey();
    }

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  4. #4
    Membre habitué Avatar de YodaOne
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 76
    Points : 139
    Points
    139
    Par défaut
    Merci pour l'info, je test ça de suite

    @+
    Bon Dev

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

Discussions similaires

  1. avoir le type du paramétre générique par réflexion
    Par al3alwa dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 22/01/2010, 13h36
  2. Classes génériques, réflexion
    Par Stnaire dans le forum ASP.NET
    Réponses: 5
    Dernier message: 25/10/2009, 16h45
  3. retour du type générique avec réflexion
    Par maxeur dans le forum C#
    Réponses: 2
    Dernier message: 03/07/2009, 14h05
  4. réflexion sur des types génériques
    Par ziad.shady dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 06/06/2008, 12h25
  5. caractère générique utilisable dans strcmp
    Par barthelv dans le forum C
    Réponses: 9
    Dernier message: 01/08/2003, 16h54

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