Markieren Sie das Kontrollkästchen Englisch, um die englische Version dieses Artikels anzuzeigen. Sie können den englischen Text auch in einem Popup-Fenster einblenden, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch
Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

List<T>.Find-Methode

Sucht nach einem Element, das die durch das angegebene Prädikat definierten Bedingungen erfüllt, und gibt das erste Vorkommen im gesamten List<T> zurück.

Namespace:  System.Collections.Generic
Assembly:  mscorlib (in mscorlib.dll)

public T Find(
	Predicate<T> match
)

Parameter

match
Typ: System.Predicate<T>
Der Predicate<T>-Delegat, der die Bedingungen für das Element definiert, nach dem gesucht werden soll.

Rückgabewert

Typ: T
Das erste Element, das die durch das angegebene Prädikat definierten Bedingungen erfüllt, sofern vorhanden, andernfalls der Standardwert für den Typ T.

AusnahmeBedingung
ArgumentNullException

match hat den Wert null.

Predicate<T> ist ein Delegat für eine Methode, die true zurückgibt, wenn das übergebene Objekt die im Delegaten definierten Bedingungen erfüllt. Die Elemente der aktuellen List<T> werden einzeln an den Predicate<T>-Delegaten übergeben, und List<T> wird in Vorwärtsrichtung vom ersten Element bis zum letzten Element durchlaufen. Die Verarbeitung wird angehalten, wenn eine Übereinstimmung gefunden wird.

Wichtiger HinweisWichtig

Stellen Sie während des Durchsuchens einer Liste von Werttypen sicher, dass der Standardwert für den Typ nicht die Anforderungen des Suchprädikats erfüllt. Andernfalls gibt es keine Möglichkeit der Unterscheidung zwischen einem Standardwert, der angibt, dass keine Übereinstimmung gefunden wurde, und einem Listenelement, das zufällig über denselben Standardwert für den Typ verfügt. Wenn der Standardwert die Anforderung des Suchprädikats erfüllt, verwenden Sie stattdessen die FindIndex-Methode.

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

Im folgenden Beispiel wird das Suchen von Methoden für die List<T>-Klasse veranschaulicht. Das Beispiel für die List<T>-Klasse enthält book-Objekte der Klasse Book, wobei die Daten aus der XML-Beispieldatei: Bücher ('Books') (LINQ to XML) verwendet werden. Im folgenden Beispiel wird die FillList-Methode mit LINQ to XML verwendet, um die Werte aus dem XML in Eigenschaftenwerte der book-Objekte zu konvertieren.

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

Methode

Beispiel

Find(Predicate<T>)

Sucht ein Buch nach einer ID mit dem IDToFind-Prädikatdelegaten.

Im C#-Beispiel wird ein anonymer Delegat verwendet.

FindAll(Predicate<T>)

Suchen Sie alle Bücher, deren Genre-Eigenschaft "Computer" ist, mit dem FindComputer-Prädikatdelegaten.

FindLast(Predicate<T>)

Sucht das letzte Buch in der Auflistung, das über ein Veröffentlichungsdatum vor 2001 verfügt, mit dem PubBefore2001-Prädikatdelegaten.

Im C#-Beispiel wird ein anonymer Delegat verwendet.

FindIndex(Predicate<T>)

Sucht den Index des ersten Computerbuchs mit dem FindComputer-Prädikatdelegaten.

FindLastIndex(Predicate<T>)

Sucht den Index des letzten Computerbuchs mit dem FindComputer-Prädikatdelegaten.

FindIndex(Int32, Int32, Predicate<T>)

Sucht den Index des ersten Computerbuchs in der zweiten Hälfte der Auflistung mit dem FindComputer-Prädikatdelegaten.

FindLastIndex(Int32, Int32, Predicate<T>)

Sucht den Index des letzten Computerbuchs in der zweiten Hälfte der Auflistung mit dem FindComputer-Prädikatdelegaten.


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

Unterstützt in: 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Anzeigen: