IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Collections, Option Strict et CType


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 999
    Par défaut Collections, Option Strict et CType
    Bonjour,

    Je suis en train de coder un programme avec VB.NET, en suivant les recommandations pour avoir un code propre et rapide (donc avec Option Explicit et Option Strict ON)

    J’utilise pas mal les collections. Chacune de mes collections ne contient que des objets du même type, bien que ce ne soit pas une obligation en VB.NET

    Lorsque je parcours la collection avec For Each pas de problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Liste_Formes_2D As Collection
    ...
    Dim Fo As Forme_2D
    For Each Fo In Liste_Formes_2D
    ...
    Next
    Par contre, lorsque je dois utiliser une boucle For Next classique, où lorsque je dois appeler le nième membre de la collection via la méthode .item, je suis obligé de recourir à un CType :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim Liste_Formes_2D As Collection
    ...
    Dim Fo As Forme_2D
    Dim j As Integer
    ...
    For j = Liste_Formes_2D.Count To 1 Step -1
          ...
    Fo = CType(Liste_Formes_2D.Item(j), Forme_2D)
          ...
    Next
    N’y a-t-il pas moyen, en VB.NET, de déclarer non pas des collections d’objets génériques, mais de déclarer une collection ne contenant qu’un type d’objet précis, dans mon exemple déclararer la collection Liste_Formes_2D comme étant une liste de Forme_2D ?

    Cela éviterait d’appeler CType, cela améliorerais la performance, et le code serai plus propre (rien ne m'empêche d'ajouter par erreur un objet autre que Forme_2D à la collection Liste_Forme_2D et ce type de bug risque d'être assez difficile à détecter)

    Il y a longtemps en C++ (sous DOS) je pouvais déclarer une liste comme étant une liste de pointeur d’un certain type d’objets, je voudrais faire la même chose avec VB.NET

    Merci

  2. #2
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Utilise une collection générique (par exemple : Dim listeFormes2D As List(Of Forme2D))

  3. #3
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 999
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    Utilise une collection générique (par exemple : Dim listeFormes2D As List(Of Forme2D))
    Super merci, c'est exactement ce que je cherchais

    Sinon c'est des farceurs chez Microsoft :
    - pour une Collection de N éléments, les indices vont de 1 à N
    - pour une Collection Générique de N éléments, les indices vont de 0 à N-1

    Heureusement que j'ai pas 20.000 lignes de code à modifier

    A+

  4. #4
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Non, ce ne sont pas des farceurs c'est juste toi qui utilisait le type Collection présent là pour assurer la rétrocompatibilité avec les anciens programmes tournant sous VB6 (dont les index démarraient à 1)
    Toutes les collections en .Net sont 0-indéxées (même celle que tu utilises stocke en interne ces éléments dans un conteneur 0-indéxé c'est juste l'interface publique qui s'occupe du décalage pour assurer la rétrocompatibilité sus-mentionnée)

  5. #5
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 999
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    le type Collection présent là pour assurer la rétrocompatibilité avec les anciens programmes tournant sous VB6

    Toutes les collections en .Net sont 0-indéxées (même celle que tu utilises stocke en interne ces éléments dans un conteneur 0-indéxé c'est juste l'interface publique qui s'occupe du décalage pour assurer la rétrocompatibilité sus-mentionnée)
    Bonne nouvelle donc, le gain en performance devrait être non négligeable

  6. #6
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 999
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    présent là pour assurer la rétrocompatibilité avec les anciens programmes tournant sous VB6 (dont les index démarraient à 1)
    Question à la con : comment faire en sorte que VB.NET refuse (ou signale) que l'on utilise les fonctions de rétrocompatibilité (puisqu'elles sont moins performantes) ?

    Merci

    A bientôt

  7. #7
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Personne n'a dit qu'elles étaient forcément moins performantes (et de toute façon les problèmes de performances ça se profile quand il y a un réel besoin pas avant ) ; vu que pour la majorité c'est les méthodes .Net encapsulées (avec 2-3 différences, par ci par là) ; sinon il te suffit d'aller dans les propriétés du projet ; onglet références ; décocher l'import automatique vers Microsoft.VisualBasic ça n'empêchera pas de s'en servir mais pour le faire il faudra alors pleinement qualifier ce qu'on utilise

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VB 2010 : Problème avec option strict
    Par biquet dans le forum VB.NET
    Réponses: 4
    Dernier message: 18/01/2011, 15h54
  2. Repeater et XML avec Option Strict "On"
    Par boivsam dans le forum ASP.NET
    Réponses: 0
    Dernier message: 15/10/2009, 19h34
  3. Option Strict On ET OpenMode.Binary
    Par Tropic dans le forum VB.NET
    Réponses: 8
    Dernier message: 25/08/2009, 08h05
  4. VB.Net / Option Strict On
    Par sandre dans le forum ASP.NET
    Réponses: 5
    Dernier message: 15/07/2009, 17h37
  5. Probleme : option strict on rejette toute liaison tardive
    Par Roken62 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/04/2009, 16h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo