Dictionnaire avec deux instance de classe

Fermé
Alice - 24 mars 2020 à 07:52
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 - 24 mars 2020 à 19:45
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 !
A voir également:

4 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
24 mars 2020 à 09:45
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
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 928
24 mars 2020 à 09:53
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;
    ...
}
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011 > Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024
Modifié le 24 mars 2020 à 09:59
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.
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 928 > Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021
24 mars 2020 à 13:14
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...
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011 > Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024
24 mars 2020 à 13:59
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...
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 928 > Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021
24 mars 2020 à 19:45
Ha c’est vrai.
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 928
24 mars 2020 à 09:48
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.
0
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 ?
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié le 24 mars 2020 à 10:50
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
0
Merci à tous ! J’ai trouvé mon erreur.
0