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 :

Erreur dans l'utilisation de générique


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Ingénieur logiciel
    Inscrit en
    Janvier 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur logiciel

    Informations forums :
    Inscription : Janvier 2008
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Erreur dans l'utilisation de générique
    Bonjour,

    Comme je débute en C#, c'est surement un pb simple à résoudre, mais malgré mes différentes recherches je bloque dessus.

    Le code suivant fonctionne très bien :
    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
    36
    37
    38
    39
    40
    41
     
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace DeveloppementNTiers.BusinessObjects
    {
        abstract public class db_field<T>
        {
            public T field {get; set;}
        }
     
        abstract public class db_table
        {
    //        Dictionary <string,db_field> db_fields;
            public db_table() 
            { 
            }
        }
     
        public class Client : db_table
        {
    //        db_fields t_Client = new db_fields();
    //        db_fields["ClientID"]=db_field<int>;
     
            public int      ClientID { get; set; }
            public string   ClientLastName { get; set; }
            public string   ClientFirstName{ get; set; }
     
            public Client()
            { 
            }
     
            public Client(int id, string lastname, string firstname)
            {
                this.ClientID = id;
                this.ClientLastName = lastname;
                this.ClientFirstName = firstname;
            }
        }
    }
    Comme je veux le rendre générique, j'ai rajouté les 2 classes
    abstract public class db_field<T>
    abstract public class db_table

    Si je décommente la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dictionary <string,db_field> db_fields;
    J'obtiens l'erreur
    L'utilisation du type 'x.db_field<T>' générique requiert les argument de type '1'
    Mon objectif est de remplacer dans la classe Client les lignes du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public int ClientID { get; set; }
    par quelque chose qui devrait ressembler à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    db_fields["ClientID"]=db_field<int>;
    Merci d'avance pour toute aide

  2. #2
    Expert éminent
    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 : 46
    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
    Points : 7 660
    Points
    7 660
    Par défaut
    L'erreur c'est que tu déclares mal le dictionnaire. Tu dois clairement indiquer le paramètre de type générique pour que cela fonctionne. Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dictionary <string, db_field<int>> db_fields;
    Donc ce que tu veux faire ne fonctionnerait pas (les champs seraient tous du même type) et de toute façon ce que tu veux faire est dangereux. Accéder à un champ par son nom c'est un risque d'erreur à l'exécution (erreur dans le nom) alors qu'avec des propriétés tu es tranquille (la compilation ne passerait pas).
    Pas de questions techniques par MP

  3. #3
    Membre à l'essai
    Profil pro
    Ingénieur logiciel
    Inscrit en
    Janvier 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur logiciel

    Informations forums :
    Inscription : Janvier 2008
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Merci pour cette réponse très rapide.
    Ça n'arrange pas vraiment mes affaires

    En fait je compte récupérer directement les champs dans la méta base, donc il n'y aura pas d'erreur de nom.

    Donc mon besoin est de pouvoir gérer une collection d'objets de type différent (en fait, les différents types utilisés dans les tables de ma base de données).

    J'aimerais le faire dynamiquement, sans avoir à coder en dur la structure dans les programmes.

Discussions similaires

  1. [XL-2010] erreur dans l'utilisation de if, elseif, else imbriqués
    Par Maude_84 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/02/2015, 11h41
  2. Erreur dans l'utilisation d'ActionWebService
    Par NacedoChristo dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 25/03/2010, 15h37
  3. Réponses: 7
    Dernier message: 29/04/2007, 10h37
  4. VBA-Excel Erreur dans syntaxe requete en utilisant ADO
    Par rafnt dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/10/2006, 14h23
  5. Erreur dans l'utilisation de SWAP
    Par mire dans le forum Langage
    Réponses: 12
    Dernier message: 15/03/2003, 21h39

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