Spécifier un type pour un ArrayList

Résolu
_Fabien Messages postés 119 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 28 avril 2008 - 20 févr. 2008 à 19:10
_Fabien Messages postés 119 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 28 avril 2008 - 22 févr. 2008 à 14:36
Bonjour,

Voici, ma classe (la question viendra après) : 
Option explicit on
Option strict on

Public

Class TabCommandes

  Private _tbCommandes
As ArrayList

  Sub

New (
ByVal _tbCommandes
As ArrayList)

    Me._tbCommandes = _tbCommandes

  End
Sub

Public
Property tbCommandes()
As ArrayList

Get
  Return
Me._tbCommandes

End
Get

Set (
ByVal value
As ArrayList)
 
Me._tbCommandes = value

End
Set

End
Property

End class

tbCommandes contiendra des objets "Commande".

Voici, ma question : 
Y a-t'il un moyen de spécifier dans ma classe que mon ArrayList contiendra des objets "Commande" ? Lorsqu'il y a l'option strict, voici le message d'erreur :

Erreur 1 Option Strict On rejette toute liaison tardive.

En revanche, en mettant strict sur Off ou en commentaire, ça passe, mais je trouve que ce n'est pas propre. Auriez-vous une suggestion ?

n.b. si j'ai choisi un ArrayList c'est parce qu'il est dynamique et donc pas obligé de spécifié une taille dans le main().

6 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
20 févr. 2008 à 20:09
Salut

Peux-tu mettre la maniere dont tu utilises ta classe.

Il faut avec des arraylist faire des cast pour lire les données, à l'interieur

Le problème vient des conversions
Exemple

malist.add(new Foo())

dim f  = CType(malist.items(0),Foo)
ou
dim f  = Directcast(malist.items(0),Foo)

Ce qui est le mieux c'est à la place d'utiliser des ArrayList c'est d'utiliser les List générique
(plus optimisée car evite les cast et le boxing/unboxing sur les types par valeur)
de plus c'est plus sécurisé
Car dans une List (of X) tu peux ajouter que des X ou des sous type de X, et en plus tu as l'intellisense.
3
NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 159
21 févr. 2008 à 11:35
Bonjour

List(of ...) n'est disponique qu'à partir de .NET2.
La conversion par CType et DirectCast est fortement conseillée avec les ArrayList.

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
3
_Fabien Messages postés 119 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 28 avril 2008
21 févr. 2008 à 11:17
Oubli ! Je me fais "jeter" à cause de cette méthode :

Public
Function Calcul
As
Single

Dim i
As
Integer
Calcul = 0

For i = 0
To
Me._tbCommande.Count - 1
   Calcul +=
Me._tbCommande(i).NbCommandes ' "Erreur 1 Option Strict On rejette toute liaison tardive" se déclenche ici (normal) car mon ArrayList n'est pas "typé" (si c'est possible de typer un arraylist ?) : NbCommandes de Commande, il ne connaît pas.

Next

Return Calcul

End
Function

============

Voici mon main :
imports project (dll qui comprend les objets TabCommandes et Commande)

dim tab as TabCommandes 'Tableau de commandes

dim objCmd as Commande

for i=1 to 5
   objCmd =
New Commande(blablabla)
  
tab.Add (objCmd)

next i
=========
Attention, ça marche sans problème à condition que j'enlève le strict on dans ma classe/DLL, mais je trouve que ce n'est pas propre. Quant à ta proposition, je vais l'étudier (les objets List), car si c'est dynamique (pas besoin de spécifier la taille) et si je peux spécifier dans ma classe le type de ma List, dans mon exemple "list of Commande", pour moi c'est parfait car c'est le but recherché.
0
_Fabien Messages postés 119 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 28 avril 2008
21 févr. 2008 à 15:39
Merci. Je vais étudier le problème, mais list (Of ....) que j'ai testé marche bien.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
21 févr. 2008 à 19:20
Pas tres explicite ta phrase

As-tu encore un problème ou sinon valide le post
0
_Fabien Messages postés 119 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 28 avril 2008
22 févr. 2008 à 14:36
Non, ça marche des 2 manières proposées : list (of commande) ou CType(tbCommande(i), Commande), sachant que tbCommande est un arrayslist de commande. merci à tous !
0
Rejoignez-nous