Auf Englisch lesen

Freigeben über


List<T>.FindAll(Predicate<T>) Methode

Definition

Ruft alle Elemente ab, die die vom angegebenen Prädikat definierten Bedingungen erfüllen.

C#
public System.Collections.Generic.List<T> FindAll (Predicate<T> match);

Parameter

match
Predicate<T>

Der Predicate<T>-Delegat, der die Bedingungen für die Elemente definiert, nach denen gesucht werden soll.

Gibt zurück

Eine List<T> mit allen Elementen, die ggf. die durch das angegebene Prädikat definierten Bedingungen erfüllen, andernfalls eine leere List<T>.

Ausnahmen

match ist null.

Beispiele

Im folgenden Beispiel werden die Find-Methoden für die List<T> -Klasse veranschaulicht. Das Beispiel für die List<T> -Klasse enthält book Objekte der -KlasseBook, die die Daten aus der Beispiel-XML-Datei: Bücher (LINQ to XML) verwenden. Die FillList -Methode im Beispiel verwendet LINQ to XML, um die Werte aus dem XML-Code in Eigenschaftswerte der book -Objekte zu analysieren.

In der folgenden Tabelle werden die Beispiele für die Findmethoden beschrieben.

Methode Beispiel
Find(Predicate<T>) Sucht ein Buch anhand einer ID mithilfe des IDToFind Prädikatdeldels.

C#-Beispiel verwendet einen anonymen Delegaten.
FindAll(Predicate<T>) Suchen Sie alle Bücher, deren Genre Eigenschaft "Computer" ist, mithilfe des FindComputer Prädikatdels.
FindLast(Predicate<T>) Sucht das letzte Buch in der Sammlung, das ein Veröffentlichungsdatum vor 2001 hat, mithilfe des PubBefore2001 Prädikatdeldels.

C#-Beispiel verwendet einen anonymen Delegaten.
FindIndex(Predicate<T>) Sucht den Index des ersten Computerbuchs mithilfe des FindComputer Prädikatdeldels.
FindLastIndex(Predicate<T>) Sucht den Index des letzten Computerbuchs mithilfe des FindComputer Prädikatdeldels.
FindIndex(Int32, Int32, Predicate<T>) Sucht den Index des ersten Computerbuchs in der zweiten Hälfte der Auflistung mithilfe des FindComputer Prädikatdeldels.
FindLastIndex(Int32, Int32, Predicate<T>) Sucht den Index des letzten Computerbuchs in der zweiten Hälfte der Sammlung unter Verwendung des FindComputer Prädikatdeldels.
C#
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; }
    }
}

Hinweise

Der Predicate<T> ist ein Delegat an eine Methode, die zurückgibt true , wenn das an sie übergebene Objekt den im Delegaten definierten Bedingungen entspricht. Die Elemente des aktuellen List<T> werden einzeln an den Predicate<T> Delegaten übergeben, und die Elemente, die den Bedingungen entsprechen, werden im zurückgegebenen List<T>gespeichert.

Diese Methode führt eine lineare Suche durch. Daher ist diese Methode ein O(n)-Vorgang, wobei n ist Count.

Gilt für:

Produkt Versionen
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Weitere Informationen