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 :

Instruction du type "If For Each"


Sujet :

VB.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 7
    Par défaut Instruction du type "If For Each"
    Bonjour,

    J'ai une classe Dossier qui possède deux états Nom et Type comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Class Dossier
     
    Private Nom As String
    Private Type As Integer
     
    End Class
    Toutes les instanciations de cette classe son ajouter dans une collection. Mon problème et que lorsque j'instancie un nouveau dossier je veux être sûr que le nom que je lui donne n'est pas déjà utilisé, pour celà j'utilise la méthode suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim i as integer = 0
    For Each Dossier as Dossier in MesDossiers
    If Dossier.Nom = Nom_NouveauDossier then i += 1
    Next
    If i = 0
    MesDossiers.Add(NouveauDossier)
    Else
    MsgBox("Erreur, ce nom de dossier existe déjà")
    EndIf
    Sauf que je trouve cette méthode assez lourde. N'existe-t-il une instruction du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If For Each Dossier In MesDossiers, Dossier.Nom <> Nom_NouveauDossier then MesDossiers.Add(NouveauDossier)
    ? ou quelque chose qui simplifierait la programmation ?

    Merci de votre aide !

    Nico.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    quelques défauts de vocabulaire dans ta description, faudra ptete lire un peu de doc pour avoir les bons termes

    plusieurs possibilités pour diminuer le nombre de ligne de code

    si tu es sur le framework 3 ou 3.5, tu peux utiliser linq to object

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (from d as dossier in mesdossiers where d.Nom = Nom_NouveauDossier select d).count = 0 then
        MesDossiers.Add(NouveauDossier)
      Else
        MsgBox("Erreur, ce nom de dossier existe déjà")
    end If
    sinon soit en modifiant un peu ta classe avec un design pattern factory et un dictionary (ou un list contenant les noms) et donc juste un .containskey (ou .contains pour le list)

    ou encore sans factory avec mesDossiers as dictionary(of string,dossier)
    dans le string tu mets le nom (ca permet au passage de retrouver une instance par son nom de manière performante)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Instruction For Each
    Par marsupilami34 dans le forum VBA Access
    Réponses: 4
    Dernier message: 15/01/2008, 16h32
  2. [DAO] Instruction For Each .. Next
    Par ancel17 dans le forum VBA Access
    Réponses: 10
    Dernier message: 24/04/2007, 11h07
  3. For each enregistrement d'une table, instructions
    Par Philippe GARNIER dans le forum Access
    Réponses: 4
    Dernier message: 26/07/2006, 09h08

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