Accès variable de type Generic.List(Of ...) dans [Résolu] [VB.Net] - C#/.NET managed - Programmation
Marsh Posté le 03-08-2006 à 02:33:56
Bon, ok, personne ne sait/veut répondre (mais je suis coutumier du fait, et je remets en question ma façon d'exposer le problème).
J'ai une variable _joueurs de type Generic.List(Of Joueur)
Joueur étant une classe toute bête avec une propriété nomJoueur as string et une propriété montantJoueur as integer
Comment puis-je arriver à faire :
msgbox ( _joueurs("toto" ).montantJoueur )
???
Je ne sais pas si je dois surcharger la classe Generic.List ou créer une classe qui en hérite (genre ListJoueur) et lui ajouter une fonction TrouveJoueur ? Une autre suggestion peut-être ?
Marsh Posté le 03-08-2006 à 10:12:40
Dsl, mais
- VB.Net : moi pas comprendre
- .Net 2 : moi pas pratiquer
et je pense qu'on est pas mal dans ces cas sur ce forum, donc soit patient...
Une question : je comprends pas l'intérêt d'une liste generic dans ton cas...
Marsh Posté le 03-08-2006 à 18:51:51
Merci _Mose_ pour ton intervention... j'ai toujours l'impression d'être le seul à qui on ne répond pas
Ta dernière phrase m'intéresse, j'avoue ne pas m'être posé trop longtemps la question quand j'ai vu que les Generic.List servaient à stocker des variables qui ont toutes le même type (à l'inverse des arraylists si je ne m'abuse).
Quoi qu'il en soit, j'ai trouvé ma solution ici pour ceux que ça intéresserait :
http://www.codeguru.com/vb/gen/vb_ [...] php/c6079/
Il s'agissait pour moi de pouvoir modifier la propriété par défaut "Item" afin d'entrer un index sous forme d'une Chaine et non d'un Integer, indice de la List.
Ce qui se conçoit bien s'énonce clairement dit le proverbe... j'ai l'impression d'avoir un peu de mal avec ma conception du problème et par conséquent, avec sa description !
Encore merci à toi, et si tu pouvais m'en dire plus sur ta remarque, je suis preneur !
A+
Marsh Posté le 03-08-2006 à 19:26:51
007seb a écrit : Merci _Mose_ pour ton intervention... j'ai toujours l'impression d'être le seul à qui on ne répond pas |
Lol, bah forcément : VB + .Net 2 c'est pas le plus courant (pour l'instant ?)
007seb a écrit : Ta dernière phrase m'intéresse, j'avoue ne pas m'être posé trop longtemps la question quand j'ai vu que les Generic.List servaient à stocker des variables qui ont toutes le même type (à l'inverse des arraylists si je ne m'abuse). |
Oui et non. Disons qu'une ArrayList stocke des variables qui ont toutes le même type : Object.
Après... faut faire du cast.
007seb a écrit : Il s'agissait pour moi de pouvoir modifier la propriété par défaut "Item" afin d'entrer un index sous forme d'une Chaine et non d'un Integer, indice de la List. |
Je ne comprend pas très bien les tenants et les aboutissants de ton code, mais dans une Hashtable, tu peux te servir de n'importe quel objet comme indice pour stocker une donnée. Donc pourquoi pas une chaine de caractère :
Code :
|
Après, si tu veux éviter de faire un cast à chaque fois que tu vas lire ta valeur, tu peux implémenter ta propre Hashtable et surcharger l'opérateur public object this[object key] comme ceci : public new MyClass this[object key].
L'opérateur new te permettant de changer la signature de la propriété pour qu'elle retourne un 'MyClass' au lieu d'un 'Object'.
Marsh Posté le 03-08-2006 à 22:09:32
Ok, ça confirme donc ce que je pensais.
J'ai fait exactement la même chose avec le Generic.List, surcharger le Item(indice As Integer) par Item(nomJoueur As String) et ça marche bien, et le code me semble propre, je laisse donc comme ça. Niveau performances du code, vu le peu de données à traiter, je me satisfait très bien de cela.
Merci encore et A++
Marsh Posté le 20-11-2006 à 19:23:23
Bonsoir,
J'ai le même probléme que toi seb 007, tu as trouvé une solution ?
Merci
Marsh Posté le 02-08-2006 à 15:29:56
Bonjour,
Je continue mon auto-formation au .Net et je rencontre une difficulté.
J'ai créé cette classe au sein de mon projet.
Il s'agit d'une classe "Partie" qui contient une variable privée "Joueurs" de type Generic.List(Of Joueur)
J'ai créé une Property Joueurs pour pouvoir accéder à cette variable depuis une instance de "Partie" afin de pouvoir écrire ce genre de code dans le code de ma Form :
Dim laPartie as New Partie()
Dim monJoueur as New Joueur()
et
laPartie.Joueurs.add(monJoueur)
Pourquoi le code dans le "Set" de ma propriété Joueurs ne s'exécute pas ?
Voici le code de ma classe "Partie"
Public Class Partie
Private _phase As Integer
Private _pot As Integer
Private _numPartie As String
Private _joueurs As New System.Collections.Generic.List(Of Joueur)
Private _coups As New System.Collections.Generic.List(Of Coup)
Private Shared _nbCoups As Integer
Public Property NumPartie() As String
Get
Return _numPartie
End Get
Set(ByVal Value As String)
_numPartie = Value
End Set
End Property
Public Property PhaseEncours() As Integer
Get
Return _phase
End Get
Set(ByVal Value As Integer)
_phase = Value
End Set
End Property
Public Shared ReadOnly Property NbCoups() As Integer
Get
Return _nbCoups
End Get
End Property
Public Property Joueurs() As System.Collections.Generic.List(Of Joueur)
Get
Return _joueurs
End Get
Set(ByVal Value As System.Collections.Generic.List(Of Joueur))
MsgBox("je suis dans le Set de la property joueurs() dans la classe partie" ) ' <----- Ne s'affiche jamais... pourquoi ?
_joueurs = Value
End Set
End Property
Public ReadOnly Property Joueurs(ByVal nomJoueur As String) As Joueur
Get
Dim _joueurTemp As Joueur = Nothing
For Each joueur As Joueur In _joueurs
If joueur.nomJoueur = nomJoueur Then _joueurTemp = joueur
Next
Return _joueurTemp
End Get
End Property
Public Property Coups() As System.Collections.Generic.List(Of Coup)
Get
Return _coups
End Get
Set(ByVal Value As System.Collections.Generic.List(Of Coup))
MsgBox("dans le Set de property coups de partie.class" ) '<------- Ne s'affiche jamais ? Pourquoi ? (idem ici)
_nbCoups += 1
_coups = Value
End Set
End Property
Public Property Pot() As Integer
Get
Return _pot
End Get
Set(ByVal Value As Integer)
_pot = Value
End Set
End Property
Sub New()
_numPartie = ""
_phase = 1
_pot = 0
_coups.Clear()
_nbcoups = 0
_joueurs.Clear()
End Sub
End Class
Merci d'éclairer ma lanterne
Message édité par 007seb le 03-08-2006 à 18:52:13