Spécifier un type pour un ArrayList [Résolu]

_Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention - 20 févr. 2008 à 19:10 - Dernière réponse : _Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention
- 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().
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 20 févr. 2008 à 20:09
3
Merci
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.

Merci nhervagault 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de nhervagault
Meilleure réponse
NHenry 14274 Messages postés vendredi 14 mars 2003Date d'inscription 18 octobre 2018 Dernière intervention - 21 févr. 2008 à 11:35
3
Merci
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

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de NHenry
_Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention - 21 févr. 2008 à 11:17
0
Merci
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é.
Commenter la réponse de _Fabien
_Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention - 21 févr. 2008 à 15:39
0
Merci
Merci. Je vais étudier le problème, mais list (Of ....) que j'ai testé marche bien.
Commenter la réponse de _Fabien
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 21 févr. 2008 à 19:20
0
Merci
Pas tres explicite ta phrase

As-tu encore un problème ou sinon valide le post
Commenter la réponse de nhervagault
_Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention - 22 févr. 2008 à 14:36
0
Merci
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 !
Commenter la réponse de _Fabien

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.