ricklekebekoi
Messages postés303Date d'inscriptionmardi 11 février 2003StatutMembreDernière intervention24 avril 2009
-
1 août 2007 à 23:32
ricklekebekoi
Messages postés303Date d'inscriptionmardi 11 février 2003StatutMembreDernière intervention24 avril 2009
-
3 août 2007 à 20:47
Bonjour,
Je vais simplifier ma question.
J'ai un Dictionnary MonDico
Dans ce dictionnary, j'ai ceci:
255, "Bonjour"
544, "Allo"
1234, "Salut"
Je peut donc faire MonDico[544] et sa me retourne "Allo"
Hors, si je fait MonDico[333], sa crash !
Je doit donc faire, avant chaque utilisation, ceci:
Et j'aimerais faire autrement.
Je voudrais un truc comme le GetSet, ou je ferais le test une seule fois, mais qu'il se ferait a chaque fois.
Je sais agir sur le MonDico, exemple faire un test si il est null quand on le demande. Je peux donc agir sur le GET de l'objet MonDico, mais moi je voudrais agir sur le GET d'un élément de Mondico ... vous me suivez ? Une solution a me proposer ?
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 2 août 2007 à 15:48
Le new n'est pas obligatoire mais conseilé, car tu "surécrit" un membre de la class de base. Avec new, tu indiques clairement que c'est un comportement voulu.
Concernant ton problème, le plus simple reste peut-être de définir une interface (voire une class abstraite) qui sera implémentée par Maison et Chien. Dans la déclaration de ta class Dictionnary, tu spécifie que le type U doit implémenter cette interface grâce à la clause where.
Ensuite, il te suffira d'appeler la valeur de l'interface que tu souhaites récupérer (retourner), je sais pas si c'est clair?
ricklekebekoi
Messages postés303Date d'inscriptionmardi 11 février 2003StatutMembreDernière intervention24 avril 20095 2 août 2007 à 14:46
Je croit que Bidou à ce que compris ce que je veux.
Est-ce que ce que tu me donne retournera ceci ?
MyDictionary MonDico = new MyDictionary();
MonDico.Add(111,"A");
MonDico.Add(222,"B");
MonDico.Add(333,"C");
string string1 = MonDico[222]; // string1 aura "A" comme valeur;
string string1 = MonDico[444]; // string1 aura null comme valeur;
????
Si c'est bon, c'est donc ce que je recherche.
Autre chose, si au lieu de string, j'ai MyDictionary MonDico. Y-a-til un moyen de définir le "default value" de ma propre classe ?? En fait définir la valeur retournée dans default(U);
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 2 août 2007 à 14:58
Oui, si tu prends l'exemple que je t'ai donné, alors tu auras le comportement que tu souhaites.
Pour le dictionnaire, ça ne change rien la façon dont tu l'initialises (avec un string ou MaClasse) étant donné qu'il est Généric... Tout ce que tu dois faire, c'est retourne un type "U"
ricklekebekoi
Messages postés303Date d'inscriptionmardi 11 février 2003StatutMembreDernière intervention24 avril 20095 2 août 2007 à 15:35
En fait, ce que je veux dire, c'est que imaginons 2 classes, Chien et Maisons
Dans mon code, j'ai ceci
MyDictionary MonDico1 = new MyDictionary();
MonDico1.Add(111,new Chien("Fido",5));
MonDico1.Add(222,new Chien("Ralphy",8)););
MonDico1.Add(333,new Chien("Boxie",5)););
string string1 = MonDico1[111]; // string1 aura le chien du nom de Fido comme valeur;
string string2 = MonDico1[444]; // string1 aurait le chien new Chien("Inconnu",0); comme valeur
MyDictionary MonDico2 = new MyDictionary();
MonDico2.Add(555,new Maison("Paris","rue 1"));
MonDico2.Add(666,new Maison("Québec","rue 2")););
MonDico2.Add(777,new Maison("New Yorl","rue 3")););
string string1 = MonDico[555]; // string1 aura la maison a Paris comme valeur;
string string2 = MonDico[888]; // string1 aurait la maison new Maison("Inconnu","Inconnu"); comme valeur
Je souhaite donc définir la valeur par défaut de la classe Chien et de la classe Maison. Pour que dans la classe MonDictionnary, je puisse faire default(U); et si U est typeof(Maison), sa me retourne new Maison("Inconnu","Inconnu");, si U est typeof(Chien), sa me retourne new Chien("Inconnu",0);, et si U est un autre type, sa me retourne son default() normal.
Ya moyen de faire cela ?
Et Sinon, autres question, dans la ligne
public new U this[T value]
Est-ce que le "new" est obligatoire ? et Pourquoi ?
En effet, il me semblait bien que mettre un membre static a une interface était étrange ... et que la ligne
return ( (ICookingEntry<TValue>)TValue ).DefaultEntry;
Était d'autant plus étrange.