Dictionnaire avec deux instance de classe

Signaler
-
Messages postés
14453
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
1 juillet 2020
-
Bonjour. J'ai un dictionnaire avec comme key et valeurs des instance de classe. Comment fais t-on pour parcourir ce distionnaire et avoir acces au propriétés des instances.

Dictionary<Person, BankAccount> dict = new Dictionary<Person, BankAccount>();


Les deux classes ont chacun deux propriété, j'aimerais avoir accès a ses deux propriétés.

Merci !

4 réponses

Messages postés
3601
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
25 juin 2020
957
Bonjour,

La boucle foreach me paraît la plus appropriée :
foreach (var personBankAccount in dict)
{
    var person = personBankAccount.Key;
    var bankAccount = personBankAccount.Value;
    ...
}

Xavier
Messages postés
14453
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
1 juillet 2020
553
Salut Xavier, nos messages se sont croisés ;).

Quand on peut faire sans var, vaut mieux éviter.
Du coup en copiant collant ton code.
foreach (var personBankAccount in dict)
{
    Person person = personBankAccount.Key;
    Bankaccount bankAccount = personBankAccount.Value;
    ...
}
Messages postés
3601
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
25 juin 2020
957 >
Messages postés
14453
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
1 juillet 2020

Pourquoi éviter var ?
Franchement la lecture du code n'en est pas impactée, si le nommage des variables est bon on n'a pas besoin de rappeler le type... Au contraire ça aligne sur la même colonne tous les noms de variables, je trouve ça plus clair et moins redondant. J'étais réticent au début, mais finalement j'ai adopté. Et je ne suis pas seul, au boulot on s'est tous mis d'accord pour privilégier var dans notre code.
Et si on utilise un IDE (ce qui est quand même plus que courant en c#), le type se retrouve en un survol de souris si on a un doute.
Messages postés
14453
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
1 juillet 2020
553 >
Messages postés
3601
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
25 juin 2020

var n'existait pas dans les premières versions, il est apparu avec Linq parce qu'une requête peut retourner un résultat dont le type n'existe pas.

C# est (initialement) un langage fortement typé, pour éviter les travers de VB, ce genre de trucs
"Coucou" + 1
qui fonctionnent presque tout le temps sauf le jour où le compilateur plante.

C'est extrêmement rare, mais c'est c'est quasiment impossible à débugguer car il faut trouver une ligne qui ne fait pas ce qu'on espérait au milieu des autres qui le font. Pire ça peut marcher en débug et pas en compilé.

j'ai eu un cas en VB6, que j'ai fini par débuggé par hasard. En débug tout fonctionnait mais pas compilé.
Pendant des mois, je faisais tourner ce module sous l'IDE, et un jour en ajoutant un saut de ligne, un jour s'est tombé en marche...
Messages postés
3601
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
25 juin 2020
957 >
Messages postés
14453
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
1 juillet 2020

Attention, le C# reste fortement typé ! Ce n'est pas parce qu'on a déclaré une variable avec var qu'on peut y mettre n'importe quoi dedans par la suite...
Messages postés
14453
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
1 juillet 2020
553 >
Messages postés
3601
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
25 juin 2020

Ha c’est vrai.
Messages postés
14453
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
1 juillet 2020
553
Bonjour

Si tu as déjà utilisé un dictionnaire avec des string, des int, des doubles etc... c’est pareil, sauf que la clé et d’un autre type.
Une fois que tu as la valeur, tu as accès aux propriétés (faut p’tet caster, là de tête je ne suis pas sûr)

Sinon commence par lire ceci https://docs.microsoft.com/fr-fr/dotnet/api/system.collections.generic.dictionary-2?view=netframework-4.8 et éventuellement t’entraîner sur cas plus simple.
Merci à tous !
Mais en fait, je voulais accéder aux propriétés des classes. Par exemple, la classe Personne a une propriété Nom et Id.

Comment je fais pour avoir accès à ses propriétés(Nom, Id) et les afficher à partir du dictionnaire ?
Messages postés
3601
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
25 juin 2020
957
Bonjour,

Dans la boucle proposée, les variables person et bankAccount, représentent les instances de tes classes. Donc tu accèdes à leurs propriétés comme d'habitude, en faisant person.Nom.

Xavier
Merci à tous ! J’ai trouvé mon erreur.