Probleme avec List.Exist ( rechercher si ma propriété existe déja dans ma collec
joker91170
Messages postés7Date d'inscriptionmercredi 3 février 2010StatutMembreDernière intervention11 février 2009
-
23 janv. 2009 à 12:29
joker91170
Messages postés7Date d'inscriptionmercredi 3 février 2010StatutMembreDernière intervention11 février 2009
-
26 janv. 2009 à 11:29
Encore debutant en C#, pour mon stage en BTS ,
je tente de developper un programme sur la gestion du materiel informatique d'une entreprise ( ecran, UC, imprimante,scanner) .
J'ai donc une classe Materiel, et des classes Ecran, Scanner etc... qui heritent des attributs de la classe Materiel.
Chaque materiel a un seul et unique code barre.
J'aimerais donc pouvoir , avant d'ajouter un nouveau materiel à ma collection ( List<Materiel> ) , VERIFIER si la valeur du code barre SAISI par l'utilisateur du programme n'existe pas déja dans ma collection .
Imaginons que je veuille ajouter un nouvel ecran dans ma collection
( grâce au clic sur le bouton Ajouter_materiel )
List<
Materiel> collection_materiel =
new
List<
Materiel>(); // on instancie la collection_materiel
Ecran nv_ecran =
new
Ecran(
Convert.ToInt32(txb_Ajouter_CB_Ecran.Text) ) // on instancie un nouvel ecran
cb_ecran_saisi =
Convert.ToInt32(txb_Ajouter_CB_Ecran.Text);
// code barre ecran saisi par l'utilisateur sur le form
//La suite de mon prog est censé verifier si le cb_ecran_saisi existe déja dans collection_materiel.... if
(collection_materiel.Exists ( Predicate<Materiel>cb_ecran_saisi ) ) // ET C'EST LA QUE JE NE COMPREND PAS !!!!
{
MessageBox.Show(
"existe deja"); }
else
{ collection_materiel.Add(nv_ecran);
}
MSDN me dit :
Predicate est le délégué d'une méthode qui retourne true, si l'objet qui lui est passé correspond aux conditions définies dans ce délégué. Les éléments du List actuel sont passés un par un au délégué Predicate et le traitement s'arrête lorsqu'une correspondance est trouvée.
* : match : </gras>Délégué Predicate qui définit les conditions des éléments à rechercher.
Que signifient clairement Predicate ?
Dois-je faire une fonction que je placerais ensuite à la place de match ?
j'ai du mal à comprendre et cela m'empeche d'avancer ( car pour ajouter je suis forcement obligé d'effectuer une recherche , pour eviter les doublons !! ).
Encore une fois je suis novice en c#, si vous pouviez m'expliquer clairement meme sans me donner forcement la reponse, car je suis la pour apprendre...
Par contre , tu convertis un Code Barre en Int32 ????
tu risque je pense d'avoir un petit problème de dépassement de capacité là !!
dans le cas de Code Barre en EAN13 çà va pas passer ...
Pour l'utilisation de Exist, il te faut comme indiqué une Predicate. ( utiliser Exist dans ton cas n'est pas terrible, c'est bcp mieux d'utiliser Constains )
Le Predicate est une méthode qui va effectuer des tests sur ton objet.
public static bool M
aterielSousGarantie(Materiel
mat)
{
if mat.SousGarantie() return true; // en supposant que tu as une méthode SousGarantie() dans ta classe Matériel ;)
joker91170
Messages postés7Date d'inscriptionmercredi 3 février 2010StatutMembreDernière intervention11 février 2009 26 janv. 2009 à 11:22
reponse à crougni77 : Merci pour tes conseils et tes explications , j' ai compris que int32 ne suffisait pas ( dc utilisation de long( = int64) ainsi que le but de la fonction exists. Maisj'ai des difficultés avec l'utilisation de contains .
J'ai essayé d'ajouter un nouveau materiel de type ecran (par exemple) avec le code suivant :
{
collection_materiel.Add(nv_ecran);
}Puis j'ai effectué un test, en ajoutant 2 fois le meme ecran , or la messagebox ne se montee jamais. En utilisant l'espion de Visual studio sur collection_materiel, j'ai remarqué que le count = 2 et il ya doublon ( ce que je ne veux surtout pas ! ). Ou est mon erreur ? surtout que dans mon contains j'ai mis nv_ecran ( si je ne me trompe pa il verifie si toutes les propriétés de nv_ecran existent dans ma collection, nan ?).
Vous n’avez pas trouvé la réponse que vous recherchez ?
joker91170
Messages postés7Date d'inscriptionmercredi 3 février 2010StatutMembreDernière intervention11 février 2009 26 janv. 2009 à 11:29
Bidou merci pour ta reponse, c'est ce qu'apparemment je cherchais à faire ( meme si contains à l'air plus simple )
par contre je ne comprends pas l'utilisation de delegate ?
et la fonction Exists ne doit-elle pas retourner true ou false ?