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 :

Initialisation de List<T> inline avec T = classe abstraite


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut Initialisation de List<T> inline avec T = classe abstraite
    Bonjour,

    J'ai une classe abstraite "Value".
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        public abstract class Value
        {
            public abstract int CompareTo(Value other);
        }

    Et des classes dérivées : "StringValue", "IntValue", etc.
    Code csharp : 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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
        public class StringValue : Value
        {
            private string Value = string.Empty;
     
            public StringValue(string Value)
            {
                this.Value = Value;
            }
     
            public override int CompareTo(Value other)
            {
                if (other == null)
                {
                    return 1;
                }
                StringValue s = (other as StringValue);
                if (s == null)
                {
                    return 1;
                }
                else
                {
                    return this.Value.CompareTo(s.Value);
                }
            }
        }
     
        public class IntValue : Value
        {
            private int Value = 0;
     
            public IntValue(int Value)
            {
                this.Value = Value;
            }
     
            public override int CompareTo(Value other)
            {
                if (other == null)
                {
                    return 1;
                }
                IntValue s = (other as IntValue);
                if (s == null)
                {
                    return 1;
                }
                else
                {
                    return this.Value.CompareTo(s.Value);
                }
            }
     
        }
    }

    Je souhaite initialiser inline un List<Value> contenant donc une série d'instances des différentes classes dérivées :
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<Value> l1 = new List<Value>(new[] { new IntValue(1), new StringValue("sylvain"), new StringValue("lyon") });

    Il me dit :
    No best type found for implicitly-typed array
    J'ai raté quoi ?

  2. #2
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Soit t'as pas exactement écrit ça dans ton code, soit il manque des infos (version du framework, type de projet, etc.) qui pourraient être utiles à la compréhension (et la reproduction) du phénomène parce qu'en l'état ça compile parfaitement chez moi
    Ok la question avait pas encore été éditée en fait

    Il faut que tu précise le type de ton tableau explicitement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Value> l1 = new List<Value>(new Value[] { new IntValue(1), new StringValue("sylvain"), new StringValue("lyon") });

  3. #3
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Ah ouais quand même...

    J'ai mis un cast explicite en "Value" sur le premier new de chaque série, et maintenant ça marche

    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<Value> l1 = new List<Value>(new[] { (Value)new IntValue(1), new StringValue("sylvain"), new StringValue("lyon") });

    Edit : Ah, ou alors new Value[] en fait c'est plus propre, il est vrai

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

Discussions similaires

  1. probleme Avec les classes Abstraites
    Par thibaultc dans le forum C++/CLI
    Réponses: 3
    Dernier message: 02/12/2013, 10h58
  2. JFace Databinding avec une classe abstraite
    Par anthony.pa dans le forum SWT/JFace
    Réponses: 0
    Dernier message: 03/09/2013, 17h01
  3. problème avec les classes abstraite avec C#
    Par takfa2008 dans le forum C#
    Réponses: 1
    Dernier message: 29/06/2009, 10h25
  4. Réponses: 9
    Dernier message: 26/03/2009, 11h43
  5. Problème d'héritage avec une classe abstraite
    Par Ph.denis dans le forum C++
    Réponses: 7
    Dernier message: 22/03/2008, 10h37

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