Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese
Questa documentazione è stata archiviata e non viene gestita.

Metodo List<T>.Find

Cerca un elemento che corrisponda alle condizioni definite dal predicato specificato e restituisce la prima occorrenza nell'intera classe List<T>.

Spazio dei nomi:  System.Collections.Generic
Assembly:  mscorlib (in mscorlib.dll)

public T Find(
	Predicate<T> match
)

Parametri

match
Tipo: System.Predicate<T>
Delegato Predicate<T> che definisce le condizioni dell'elemento da cercare.

Valore restituito

Tipo: T
Primo elemento che soddisfa le condizioni definite dal predicato specificato, se trovato; altrimenti viene restituito il valore predefinito del tipo T.

EccezioneCondizione
ArgumentNullException

match è null.

Predicate<T> è un delegato a un metodo che restituisce true se l'oggetto passato corrisponde alle condizioni definite nel delegato. Gli elementi dell'oggetto List<T> corrente vengono passati singolarmente al delegato Predicate<T>, spostandosi in avanti in List<T>, a partire dal primo elemento e terminando con l'ultimo elemento. L'elaborazione viene interrotta quando viene trovata una corrispondenza.

Nota importanteImportante

Durante la ricerca in un elenco contenente i tipi di valori, accertarsi che il valore predefinito per il tipo non soddisfi il predicato di ricerca. In caso contrario, non esiste alcun modo per effettuare una distinzione tra un valore predefinito indicante che non è stata trovata alcuna corrispondenza e un elemento di elenco che ha il valore predefinito per il tipo. Se il valore predefinito soddisfa il predicato di ricerca, utilizzare invece il metodo FindIndex.

Questo metodo esegue una ricerca lineare, pertanto è un'operazione O(n), dove n corrisponde a Count.

Nell'esempio seguente vengono illustrati i metodi Find per la classe List<T>. L'esempio per la classe List<T> contiene oggetti book di classe Book e utilizza dati dal file descritto in File XML di esempio: Books (LINQ to XML). Il metodo FillList nell'esempio utilizza LINQ to XML per analizzare i valori dal linguaggio XML ai valori della proprietà degli oggetti book.

Nella tabella seguente vengono descritti gli esempi per i metodi di ricerca.

Metodo

Esempio

Find(Predicate<T>)

Trova un libro in base a un ID utilizzando il delegato del predicato IDToFind.

Nell'esempio C# viene utilizzato un delegato anonimo.

FindAll(Predicate<T>)

Trova tutti i libri la cui proprietà Genre è "Computer" utilizzando il delegato del predicato FindComputer.

FindLast(Predicate<T>)

Trova l'ultimo libro nell'insieme la cui data di pubblicazione è anteriore al 2001 utilizzando il delegato del predicato PubBefore2001.

Nell'esempio C# viene utilizzato un delegato anonimo.

FindIndex(Predicate<T>)

Trova l'indice del primo libro di informatica utilizzando il delegato del predicato FindComputer.

FindLastIndex(Predicate<T>)

Trova l'indice dell'ultimo libro di informatica utilizzando il delegato del predicato FindComputer.

FindIndex(Int32, Int32, Predicate<T>)

Trova l'indice del primo libro di informatica nella seconda metà dell'insieme utilizzando il delegato del predicato FindComputer.

FindLastIndex(Int32, Int32, Predicate<T>)

Trova l'indice dell'ultimo libro di informatica nella seconda metà dell'insieme utilizzando il delegato del predicato FindComputer.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;

namespace Find
{
    class Program
    {
        private static string IDtoFind = "bk109";

        private static List<Book> Books = new List<Book>();
        public static void Main(string[] args)
        {
            FillList();

            // Find a book by its ID.
            Book result = Books.Find(
            delegate(Book bk)
            {
                return bk.ID == IDtoFind;
            }
            );
            if (result != null)
            {
                DisplayResult(result, "Find by ID: " + IDtoFind);   
            }
            else
            {
                Console.WriteLine("\nNot found: {0}", IDtoFind);
            }


            // Find last book in collection published before 2001.
            result = Books.FindLast(
            delegate(Book bk)
            {
                DateTime year2001 = new DateTime(2001,01,01);
                return bk.Publish_date < year2001;
            });
            if (result != null)
            {
                DisplayResult(result, "Last book in collection published before 2001:");
            }
            else
            {
                Console.WriteLine("\nNot found: {0}", IDtoFind);
            }


            // Find all computer books.
            List<Book> results = Books.FindAll(FindComputer);
            if (results.Count != 0)
            {
                DisplayResults(results, "All computer:");
            }
            else
            {
                Console.WriteLine("\nNo books found.");
            }

            // Find all books under $10.00.
            results = Books.FindAll(
            delegate(Book bk)
            {
                return bk.Price < 10.00;
            }
            );
            if (results.Count != 0)
            {
                DisplayResults(results, "Books under $10:");
            }
            else
            {
                Console.WriteLine("\nNo books found.");
            }


            // Find index values.
            Console.WriteLine();
            int ndx = Books.FindIndex(FindComputer);
            Console.WriteLine("Index of first computer book: {0}", ndx);
            ndx = Books.FindLastIndex(FindComputer);
            Console.WriteLine("Index of last computer book: {0}", ndx);

            int mid = Books.Count / 2;
            ndx = Books.FindIndex(mid, mid, FindComputer);
            Console.WriteLine("Index of first computer book in the second half of the collection: {0}", ndx);

            ndx = Books.FindLastIndex(Books.Count - 1, mid, FindComputer);
            Console.WriteLine("Index of last computer book in the second half of the collection: {0}", ndx);

        }





        // Populates the list with sample data.
        private static void FillList()
        {

            // Create XML elements from a source file.
            XElement xTree = XElement.Load(@"c:\temp\books.xml");

            // Create an enumerable collection of the elements.
            IEnumerable<XElement> elements = xTree.Elements();

            // Evaluate each element and set set values in the book object.
            foreach (XElement el in elements)
            {
                Book book = new Book();
                book.ID = el.Attribute("id").Value;
                IEnumerable<XElement> props = el.Elements();
                foreach (XElement p in props)
                {


                    if (p.Name.ToString().ToLower() == "author")
                    {
                        book.Author = p.Value;
                    }
                    else if (p.Name.ToString().ToLower() == "title")
                    {
                        book.Title = p.Value;
                    }
                    else if (p.Name.ToString().ToLower() == "genre")
                    {
                        book.Genre = p.Value;
                    }
                    else if (p.Name.ToString().ToLower() == "price")
                    {
                        book.Price = Convert.ToDouble(p.Value);
                    }
                    else if (p.Name.ToString().ToLower() == "publish_date")
                    {
                        book.Publish_date = Convert.ToDateTime(p.Value);
                    }
                    else if (p.Name.ToString().ToLower() == "description")
                    {
                        book.Description = p.Value;
                    }
                }

                Books.Add(book);

            }

            DisplayResults(Books, "All books:");

        }

        // Explicit predicate delegate.
        private static bool FindComputer(Book bk)
        {

            if (bk.Genre == "Computer")
            {
                return true;
            }
            {
                return false;
            }

        }

        private static void DisplayResult(Book result, string title)
        {
            Console.WriteLine();
            Console.WriteLine(title);
            Console.WriteLine("\n{0}\t{1}\t{2}\t{3}\t{4}\t{5}", result.ID,
                result.Author, result.Title, result.Genre, result.Price,
                result.Publish_date.ToShortDateString());
            Console.WriteLine();


        }

        private static void DisplayResults(List<Book> results, string title)
        {
            Console.WriteLine();
            Console.WriteLine(title);
            foreach (Book b in results)
            {

                Console.Write("\n{0}\t{1}\t{2}\t{3}\t{4}\t{5}", b.ID,
                    b.Author, b.Title, b.Genre, b.Price,
                    b.Publish_date.ToShortDateString());
            }
            Console.WriteLine();

        }

    }

    public class Book
    {
        public string ID { get; set; }
        public string Author { get; set; }
        public string Title { get; set; }
        public string Genre { get; set; }
        public double Price { get; set; }
        public DateTime Publish_date { get; set; }
        public string Description { get; set; }
    }
}


.NET Framework

Supportato in: 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 o versione successiva, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (componenti di base del server non supportati), Windows Server 2008 R2 (componenti di base del server supportati con SP1 o versione successiva), Windows Server 2003 SP2

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.
Mostra: