Dictionnaire avec deux instance de classe

Alice -  
 Utilisateur anonyme -
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 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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
Utilisateur anonyme
 
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 3672 Date d'inscription   Statut Membre Dernière intervention   1 011 > Utilisateur anonyme
 
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
Utilisateur anonyme > Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention  
 
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 3672 Date d'inscription   Statut Membre Dernière intervention   1 011 > Utilisateur anonyme
 
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
Utilisateur anonyme > Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention  
 
Ha c’est vrai.
0
Utilisateur anonyme
 
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
Alice
 
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 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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
Alice
 
Merci à tous ! J’ai trouvé mon erreur.
0