Teste si un champ est identique dans une liste d'objet

gabs77 Messages postés 379 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 octobre 2008 - 19 janv. 2008 à 13:21
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 19 janv. 2008 à 21:09
Bonjour,
j'ai une list de TextBox (List<TextBox>) et je voudrais faire un test pour vérifier si l'un des champs Text de cette liste de TextBox est identique.
sachant que les autres champs comme Name, Location, ... sont différents ou non (c'est à dire que le test est dépendant que du champ Text et non des autres champ)
exemple:
List<TextBox> MesTextBoxs= new List<TextBox>();
MesTextBoxs[0].Text = "azerty"; 
MesTextBoxs[1].Text = "qwery";
MesTextBoxs[2].Text = "alzheimer";
MesTextBoxs[3].Text = "il fait beau";
MesTextBoxs[4].Text = "il fait beau";

on veut tester si dans la liste MesTextBoxs, il y a 2 TextBoxs qui ont le champ Text identique (dans le cas présent : "il faut beau")
et donc il affiche "il existe une textbox avec un valeur texte déjà existant";

Est ce que vous auriez une idée ? autre que la méthode avec les boucles comme suit :
for(int i = 0; i < MesTextBox.Count; i++)
   for(int j = 0; j < MesTextBox.Count; j++)
      if ((i != j) && (MesTextBox[i].Text.Equals(MesTextBox[j].Text)))
         {
         Message.Box("Mon Message");
         return;
         }

3 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
19 janv. 2008 à 16:03
Salut,


Tu peux regarder du côté des méthodes Exists/Find/etc, mais si ton but est d'empêcher les doublons, tu as plutot intérêt à t'orienter vers le développement d'une classe de collection où le code de la méthode Add gérera le test.

/*
coq
MVP Visual C#
CoqBlog
*/
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
19 janv. 2008 à 19:45
Bonjour,

Tu peux faire un sort sur ta List<T> puis boucler dessus ca devrait être plus rapide.

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL - Consultant indépendant
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
19 janv. 2008 à 21:09
De toute façon, il faut comparer chaque élément avec les autres (impossible de faire plus rapide!)
Par contre, prendre l'élément 1 avec 2, et 2 avec 1, c'est inutile (2x trop de testes, au moins!).

On peut donc environ doubler la vitesse en faisant comme ceci:

for (
int i = 0; i < tBoxCol.Count - 2 ; i++)
{

   for (
int j = i+1; j < tBoxCol.Count - 1; j++)
   {

      if (tBoxCol[i].Text == tBoxCol[j].Text)
MessageBox.Show(
"!");
   }
}

<hr />
-My Blog-
0
Rejoignez-nous