Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    137

    [c#] Ricerca oggetto in lista

    Ciao a tutti,
    ho una lista di oggetti List<mioOggetto> in cui inserisco gli oggetti con il metodo Add.
    Se mi capita un doppione di oggetto però non voglio inserirlo e ho provato così:

    listaOggetti.Contains(mioOggetto)

    pensando che se la lista contiene l'oggetto mi restituisce true, ma non funziona.
    Esiste un modo veloce per ricercare l'oggetto nella lista, oppure mi devo creare una funzione di ricerca scorrendo tutta la lista?

    Grazie!

  2. #2
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    la tua classe deve ridefinire il metodo equals.
    Il problema di Equals è che non è Generics. Per ovviare puoi anche implementare per la tua classe l'interfaccia IEquatable<T>.

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,477
    Originariamente inviato da twing
    Se mi capita un doppione di oggetto però non voglio inserirlo e ho provato così:
    listaOggetti.Contains(mioOggetto)
    pensando che se la lista contiene l'oggetto mi restituisce true, ma non funziona.
    Dipende da come è implementata la lista di cui parli: posta un po' di codice, in particolare la dichiarazione della classe che vai a inserire.

    Comunque, si può ipotizzare che il problema sia dovuto a quanto riportato nei Remarks della documentazione (che va sempre letta) relativa al metodo Contains: devi implementare l'interfaccia IEquatable.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    137
    il mio oggetto inserito nella lista ha diverse proprietà, tra cui delle date, ed è per questo che Contains non funziona.
    Ma come si implementa l'interfaccia IEquatable?
    Potresti farmi un esempio?
    Grazie mille

  5. #5
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    Originariamente inviato da twing
    il mio oggetto inserito nella lista ha diverse proprietà, tra cui delle date, ed è per questo che Contains non funziona
    questi meccanismi interni del linguaggio non li ho ancora studiati. Io sono rimasto a concetti più semplici tipo come si implementano le interfacce

    Un interfaccia è una serie di metodi e proprietà che descrivono (soltanto) una funzionalità. somigliano alle classi ma sono dichiarate con la parola chiave interface ed internamente elencano solo firme di metodi e proprietà ma sono prive di implementazione. Implementarla, per una classe, significa dichiarare di impegnarsi a riscrivere un implementazione per quei metodi e proprietà in modo che la classe possa avvalersi di quella funzionalità.
    L'argomento è cosi vasto ma questo per il post credo sia sufficiente.

    se leggi la documentazione che ti ha linkato alka vedrai che l'interfaccia in questione ha un solo metodo, per implementarla, quindi, si fa cosi:

    codice:
    public MiaClasse : IEquatable<MiaClasse> //step1: dichiaro che la mia classe implementa l'interfaccia IEquatable<T>
    {
        //il resto della classe
    
        //step 2 definisco ciascuno dei i metodi e proprietà (in questo caso solo un metodo) che definiscono l'interfaccia.
        public bool Equals(MiaClasse other)
        {
             //verifico se questa istanza della classe è "uguale" all'istanza other.
        }
    }
    Visual Studio rende il lavoro di implementazione leggermente più comodo, infatti dopo aver dichiarato di voler implementare un interfaccia (step 1) basta cliccare sullo smart tag (il rettangolino rosso che appare sul nome dell'interfaccia) e cliccare su "implementa interfaccia".

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    137
    Grazie sei stato molto gentile, provo a farlo subito.
    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.