Questo articolo è stato tradotto automaticamente. 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

Metodo List<T>.FindLast (Predicate<T>)

 

Data di pubblicazione: ottobre 2016

Cerca un elemento che soddisfi le condizioni definite nel predicato specificato e restituisce l'ultima occorrenza all'interno dell'intero oggetto List<T>.

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

public T FindLast(
	Predicate<T> match
)

Parametri

match
Type: System.Predicate<T>

Delegato Predicate<T> che definisce le condizioni dell'elemento da cercare.

Valore restituito

Type: T

Ultimo elemento che soddisfa le condizioni definite dal predicato specificato, se trovato; in caso contrario, viene restituito il valore predefinito del tipo T.

Exception Condition
ArgumentNullException

match è null.

Il Predicate<T> è un delegato a un metodo che restituisce true Se l'oggetto passato al corrisponde alle condizioni definite nel delegato. Gli elementi dell'oggetto List<T> vengono passati singolarmente per il Predicate<T> delegato, lo spostamento all'indietro nel List<T>, a partire dall'ultimo elemento e terminando con il primo elemento. L'elaborazione viene interrotta quando viene trovata una corrispondenza.

System_CAPS_importantImportante

Durante la ricerca di un elenco contenente i tipi di valore, assicurarsi che il valore predefinito per il tipo non soddisfa il predicato di ricerca. In caso contrario, non è possibile distinguere tra un elemento di elenco che ha il valore predefinito per il tipo e un valore predefinito, che indica che è stata trovata alcuna corrispondenza. Se il valore predefinito soddisfa il predicato di ricerca, utilizzare il FindLastIndex metodo invece.

Questo metodo esegue una ricerca lineare. Pertanto, questo metodo è un'operazione O (n) operazione, in cui n è Count.

L'esempio seguente illustra i metodi find per la List<T> classe. L'esempio per la List<T> classe contiene book oggetti della classe Book, utilizzando i dati di File XML di esempio: Libri (LINQ to XML)&2;. Il FillList metodo nell'esempio viene utilizzato LINQ to XML per analizzare i valori dai dati XML per i valori delle proprietà di book oggetti.

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

Metodo

Esempio

Find(Predicate<T>)

Trova un libro utilizzando un ID di IDToFind delegato di predicato.

Esempio c# viene utilizzato un delegato anonimo.

FindAll(Predicate<T>)

Trova tutti la cui documentazione Genre proprietà è "Computer" utilizzando il FindComputer delegato di predicato.

FindLast(Predicate<T>)

Trova l'ultimo libro nella raccolta con una data di pubblicazione prima del 2001, utilizzando il PubBefore2001 delegato di predicato.

Esempio c# viene utilizzato un delegato anonimo.

FindIndex(Predicate<T>)

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

FindLastIndex(Predicate<T>)

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

FindIndex(Int32, Int32, Predicate<T>)

Trova l'indice del primo libro di informatica nella seconda metà della raccolta, utilizzo il FindComputer delegato di predicato.

FindLastIndex(Int32, Int32, Predicate<T>)

Trova l'indice dell'ultimo libro di informatica nella seconda metà della raccolta, utilizzo il FindComputer delegato di predicato.

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;
            }
	    else
            {
                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; }
    }
}

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 2.0
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Windows Phone Silverlight
Disponibile da 8.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: