Come Funziona la Lista<T>.Contiene() Trovare Oggetti Corrispondenti?

Ho una lista di oggetti di automobile

 List<Car> cars = GetMyListOfCars();

e voglio vedere se una macchina è in elenco

if (cars.Contains(myCar))
{
}

cosa Contiene usare per capire se myCar è nell’elenco. Fa un “ToString()” sulla mia auto oggetto. Potrebbe usare il metodo Equals (), il metodo gethashcode()?

Vedo che posso passare la mia IEqualityComparer per forza la mia esecuzione, ma volevo solo capire di cosa si fa di default.

  • ToString restituisce il nome del tipo quando non è sottoposto a override in modo che non sarebbe un buon modo per confrontare elementi 🙂
  • A proposito, non si può passare il proprio IEqualityComparer<T> in List<T>.Contains metodo. È possibile passare il proprio operatore di confronto in LINQ del Contains estensione del metodo, che funziona abbastanza felicemente contro List<T>.
InformationsquelleAutor leora | 2012-02-13

 

3 Replies
  1. 18

    Direttamente dal MSDN – Elenco<T>.Contiene:

    Questo metodo determina l’uguaglianza utilizzando l’impostazione di uguaglianza
    il confronto, come definito dall’implementazione dell’oggetto della
    IEquatable(T).Metodo Equals per T (il tipo di valori nell’elenco).

    Questo metodo esegue una ricerca lineare; pertanto, questo metodo è un
    O(n) operazioni, dove n è il Conte.

    Così, alla fine, dipende da come T implementa IEquatable.Equals(). Per la maggior parte degli oggetti, questo sta andando essere un riferimento di confronto, a meno che ignorate. Stessa posizione di memoria è lo stesso oggetto.

    • Unica eccezione a questo è se si cerca null, nel qual caso Contains fa solo un item == null prova direttamente, piuttosto che utilizzando il comparatore.
    • Vero, grazie per la menzione di che.
  2. 1

    Contains tornerà true non appena possibile – che è una volta che il primo elemento che soddisfa i criteri si trova.

    Un false verrà restituito dopo tutti voci sono state processate.

    Quanto riguarda come lo fa – e ‘ di riferimento uguaglianza per i tipi di riferimento se non ignorare Equals.

Lascia un commento