IRONSOFTWAREHOME
AKTUALNOŚCI DLA PROGRAMISTÓW

C# Find (jak to działa dla programistów)

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Jacob Mellor
Updated: 28 lipca 2025

Witamy w naszym poradniku na temat przydatnej funkcji Find w C#. Właśnie natrafiłeś na potężną funkcję, która może usprawnić proces kodowania. Niezależnie od tego, czy jesteś doświadczonym programistą, czy dopiero zaczynasz, ten samouczek przeprowadzi Cię przez wszystkie elementy niezbędne do rozpoczęcia pracy.

Podstawy wyszukiwania

W swojej istocie, Find to funkcja, która pozwala zlokalizować pierwszy element w kolekcji, tablicy lub liście, który spełnia określony predykat. Czym jest predykat, pytasz? W programowaniu predykat to funkcja, która sprawdza określone warunki zdefiniowane dla elementów w zbiorze.

Przejdźmy teraz do przykładu klasy publicznej.

public class BikePart
{
    public string Id { get; set; } // Property to identify the bike part

    // Override the Equals method to specify how to compare two BikePart objects
    public override bool Equals(object obj)
    {
        if (obj == null || !(obj is BikePart))
            return false;

        return this.Id == ((BikePart)obj).Id;
    }

    // Override GetHashCode for hashing BikePart objects
    public override int GetHashCode()
    {
        return this.Id.GetHashCode();
    }

    // Override ToString to return a custom string representation of the object
    public override string ToString()
    {
        return "BikePart ID: " + this.Id;
    }
}

W tym kodzie BikePart jest naszą publiczną klasą i zawiera publiczny ciąg ID do identyfikacji każdej części roweru. Nadpisaliśmy metodę ToString, aby ładnie wydrukować ID części rowerowej, a także nadpisaliśmy metody Equals i GetHashCode dla celów porównania.

Wykorzystanie funkcji Find z predykatami

Teraz, gdy mamy naszą klasę BikePart, możemy stworzyć listę części rowerowych i użyć Find do zlokalizowania konkretnych części na podstawie ich ID. Rozważmy następujący przykład:

using System;
using System.Collections.Generic;

public static void Main()
{
    // Create a list of BikePart objects
    List<BikePart> bikeParts = new List<BikePart>
    {
        new BikePart { Id = "Chain Ring ID" },
        new BikePart { Id = "Crank Arm ID" },
        new BikePart { Id = "Regular Seat ID" },
        new BikePart { Id = "Banana Seat ID" },
    };

    // Define a predicate to find a BikePart with a specific ID
    Predicate<BikePart> findChainRingPredicate = (BikePart bp) => { return bp.Id == "Chain Ring ID"; };
    BikePart chainRingPart = bikeParts.Find(findChainRingPredicate);

    // Print the found BikePart's ID to the console
    Console.WriteLine(chainRingPart.ToString());
}

W tym kodzie tworzymy cztery obiekty BikePart z unikalnymi ID. Następnie tworzymy predykat findChainRingPredicate, który sprawdza, czy część rowerowa ma ID "Chain Ring ID". Na koniec wywołujemy Find na naszej liście części rowerowych, używając zdefiniowanego predykatu i drukujemy na konsolę ID znalezionej części.

Zrozumienie parametru predykatu

Może się zastanawiasz nad parametrem Predicate match w naszej metodzie Find. To jest miejsce, gdzie definiujesz warunki, pod którymi metoda Find zwraca element. W naszym przypadku chcieliśmy, aby metoda Find zwróciła pierwszy element, który odpowiada "Chain Ring ID".

Jeśli żaden element nie spełnia warunków zdefiniowanych w twoim predykacie, metoda Find zwróci wartość domyślną. Na przykład, jeśli pracujesz z tablicą liczb całkowitych i twój predykat nie znajdzie pasującego elementu, metoda Find zwróci '0', co jest domyślną wartością dla liczb całkowitych w C#.

Zasada wyszukiwania liniowego

Należy zauważyć, że funkcja Find przeprowadza liniowe wyszukiwanie w całej tablicy, liście lub kolekcji. Oznacza to, że zaczyna od pierwszego elementu i sprawdza kolejno każdy następny element, aż zlokalizuje pierwsze wystąpienie elementu spełniającego warunek.

W niektórych przypadkach może być konieczne zlokalizowanie ostatniego elementu spełniającego warunek, a nie pierwszego. Do tego celu C# dostarcza funkcję FindLast.

FindIndex i FindLastIndex

Podobnie jak Find pomaga w znalezieniu pierwszego wystąpienia elementu, który pasuje do twojego określonego predykatu, C# również oferuje metody FindIndex i FindLastIndex, które podają ci indeksy pierwszego i ostatniego elementu spełniającego twoje warunki.

Spróbujmy na przykładzie:

using System;
using System.Collections.Generic;

public static void Main()
{
    // Create a list of BikePart objects with an additional duplicate entry
    List<BikePart> bikeParts = new List<BikePart>
    {
        new BikePart { Id = "Chain Ring ID" },
        new BikePart { Id = "Crank Arm ID" },
        new BikePart { Id = "Regular Seat ID" },
        new BikePart { Id = "Banana Seat ID" },
        new BikePart { Id = "Chain Ring ID" }, // Added a second chain ring
    };

    // Define a predicate to find a BikePart with a specific ID
    Predicate<BikePart> findChainRingPredicate = (BikePart bp) => { return bp.Id == "Chain Ring ID"; };

    // Find the index of the first and last occurrence of the specified BikePart
    int firstChainRingIndex = bikeParts.FindIndex(findChainRingPredicate);
    int lastChainRingIndex = bikeParts.FindLastIndex(findChainRingPredicate);

    // Print the indices to the console
    Console.WriteLine($"First Chain Ring ID found at index: {firstChainRingIndex}");
    Console.WriteLine($"Last Chain Ring ID found at index: {lastChainRingIndex}");
}

Moc FindAll

Metoda FindAll, jak sama nazwa wskazuje, pobiera wszystkie elementy w kolekcji, które spełniają predykat. Służy do filtrowania elementów na podstawie określonych warunków. Metoda FindAll zwraca nową Listę ze wszystkimi pasującymi elementami.

Oto przykładowy kod:

using System;
using System.Collections.Generic;

public static void Main()
{
    // Create a list of BikePart objects with an additional duplicate entry
    List<BikePart> bikeParts = new List<BikePart>
    {
        new BikePart { Id = "Chain Ring ID" },
        new BikePart { Id = "Crank Arm ID" },
        new BikePart { Id = "Regular Seat ID" },
        new BikePart { Id = "Banana Seat ID" },
        new BikePart { Id = "Chain Ring ID" }, // Added a second chain ring
    };

    // Define a predicate to find all BikeParts with a specific ID
    Predicate<BikePart> findChainRingPredicate = (BikePart bp) => { return bp.Id == "Chain Ring ID"; };

    // Use FindAll to get all matching BikePart objects
    List<BikePart> chainRings = bikeParts.FindAll(findChainRingPredicate);

    // Print the count and details of each found BikePart
    Console.WriteLine($"Found {chainRings.Count} Chain Rings:");
    foreach (BikePart chainRing in chainRings)
    {
        Console.WriteLine(chainRing.ToString());
    }
}

Wprowadzenie IronPDF do obrazu

Kluczowym obszarem, w którym można wykorzystać naszą wiedzę na temat C#, jest manipulowanie treścią plików PDF przy użyciu IronPDF, potężnej biblioteki C# do przetwarzania plików PDF.

Załóżmy, że pracujemy z dokumentem PDF zawierającym informacje o różnych częściach rowerowych. Często musimy zlokalizować konkretne fragmenty w tej treści. W tym miejscu IronPDF i metoda Find języka C# łączą się, tworząc potężne rozwiązanie.

Najpierw użyjemy IronPDF do wydobycia tekstu z naszego PDF, a następnie możemy użyć metody Find lub FindAll, które omówiliśmy wcześniej, aby zlokalizować konkretną część w wyciągniętym tekście.

using IronPdf;
using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        // Load and extract text from a PDF document
        PdfDocument pdf = PdfDocument.FromFile(@"C:\Users\Administrator\Desktop\bike.pdf");
        string pdfText = pdf.ExtractAllText();

        // Split the extracted text into lines
        List<string> pdfLines = pdfText.Split('\n').ToList();

        // Define a predicate to find lines that contain a specific text
        Predicate<string> findChainRingPredicate = (string line) => { return line.Contains("Chain Ring ID"); };
        
        // Use FindAll to get all lines containing the specified text
        List<string> chainRingLines = pdfLines.FindAll(findChainRingPredicate);

        // Print the count and content of each found line
        Console.WriteLine($"Found {chainRingLines.Count} lines mentioning 'Chain Ring ID':");
        foreach (string line in chainRingLines)
        {
            Console.WriteLine(line);
        }
    }
}

W tym kodzie załadowaliśmy PDF, wydobyliśmy tekst, podzieliliśmy go na linie, a następnie użyliśmy FindAll do zlokalizowania wszystkich linii wspominających 'Chain Ring ID'.

Jak wyświetlać pliki PDF w VB.NET: Rysunek 1

To jest prosty przykład, jak metoda Find może być użyta wraz z IronPDF w praktycznym scenariuszu. Pokazuje użyteczność i wszechstronność języka C# wraz z jego potężnymi bibliotekami, które pomagają uczynić zadania programistyczne łatwiejszymi i bardziej wydajnymi.

Wnioski

W tym poradniku dogłębnie zajęliśmy się metodą Find w C# i jej pokrewnymi: FindIndex, FindLastIndex i FindAll. Zbadaliśmy ich zastosowania, przeanalizowaliśmy kilka przykładów kodu i odkryliśmy okoliczności, w których są one najbardziej skuteczne.

Zajęliśmy się również obróbką plików PDF przy użyciu biblioteki IronPDF. Podobnie, widzieliśmy praktyczne zastosowanie naszej wiedzy o metodzie Find w wydobywaniu i przeszukiwaniu zawartości w dokumencie PDF.

IronPDF oferuje bezpłatną wersję próbną IronPDF, co stanowi doskonałą okazję do zapoznania się z jego funkcjonalnościami i określenia, w jaki sposób może on przynieść korzyści Twoim projektom w języku C#. Jeśli zdecydujesz się kontynuować korzystanie z IronPDF po wersji próbnej, licencje zaczynają się od $999.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczącą ponad 50 osób, obsługującą NASA, Teslę i światowe agencje rządowe.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta