Altbilgi içeriğine atla
.NET YARDıM

C# Bul (Geliştiriciler İçin Nasıl Çalışır)

C#'nin kullanışlı Find fonksiyonu hakkındaki eğitimimize hoş geldiniz. Yazılım geliştirme sürecinizi kolaylaştırabilecek güçlü bir özelliğe rastladınız. Bu nedenle, ister deneyimli bir kodlayıcı olun ister yeni başlıyor olun, bu eğitim sizi harekete geçirmek için tüm unsurları adım adım açıklayacaktır.

Find Temelleri

Temelde Find, belirli bir predikatı karşılayan bir elemanı bulmanızı sağlayan bir işlevdir. Bir önermenin ne olduğunu mu soruyorsunuz? Programlamada, bir predikat, bir koleksiyon içerisindeki öğeler için tanımlanmış belirli koşulları test eden bir fonksiyondur.

Şimdi, bir public class örneğine dalalım.

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;
    }
}
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;
    }
}
Public Class BikePart
	Public Property Id() As String ' -  Property to identify the bike part

	' Override the Equals method to specify how to compare two BikePart objects
	Public Overrides Function Equals(ByVal obj As Object) As Boolean
		If obj Is Nothing OrElse Not (TypeOf obj Is BikePart) Then
			Return False
		End If

		Return Me.Id = DirectCast(obj, BikePart).Id
	End Function

	' Override GetHashCode for hashing BikePart objects
	Public Overrides Function GetHashCode() As Integer
		Return Me.Id.GetHashCode()
	End Function

	' Override ToString to return a custom string representation of the object
	Public Overrides Function ToString() As String
		Return "BikePart ID: " & Me.Id
	End Function
End Class
$vbLabelText   $csharpLabel

Bu kodda, BikePart bizim public class'ımızdır ve her bisiklet parçasını tanımlamak için bir public string ID içerir. Bisiklet parçasının ID'sini güzelce yazdırmak için ToString metodunu override ettik, ayrıca karşılaştırma amacıyla Equals ve GetHashCode metotlarını da override ettik.

Koşullar ile Find Kullanımı

BikePart sınıfımızı oluşturduğumuza göre, bisiklet parçalarının bir listesini oluşturabiliriz ve belirli parçaları ID'lerine göre bulmak için Find kullanabiliriz. Şu örneği ele alalım:

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());
}
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());
}
Imports System
Imports System.Collections.Generic

Public Shared Sub Main()
	' Create a list of BikePart objects
	Dim bikeParts As New List(Of BikePart) From {
		New BikePart With {.Id = "Chain Ring ID"},
		New BikePart With {.Id = "Crank Arm ID"},
		New BikePart With {.Id = "Regular Seat ID"},
		New BikePart With {.Id = "Banana Seat ID"}
	}

	' Define a predicate to find a BikePart with a specific ID
	Dim findChainRingPredicate As Predicate(Of BikePart) = Function(bp As BikePart)
		Return bp.Id = "Chain Ring ID"
	End Function
	Dim chainRingPart As BikePart = bikeParts.Find(findChainRingPredicate)

	' Print the found BikePart's ID to the console
	Console.WriteLine(chainRingPart.ToString())
End Sub
$vbLabelText   $csharpLabel

Bu kodda, benzersiz ID'lere sahip dört BikePart nesnesi oluşturduk. Ardından, 'Chain Ring ID' ID'sine sahip bir bisiklet parçası olup olmadığını kontrol eden bir predikat findChainRingPredicate oluşturduk. Son olarak, tanımladığımız predikatı kullanarak bisiklet parçaları listemizde Find çağırıyor ve bulunan parçanın ID'sini konsola yazdırıyoruz.

Predicate Parametresini Anlamak

Muhtemelen Find metodumuzdaki Predikat eşleşmesi parametresini merak ediyorsunuzdur. Bu, Find metodunun bir eleman döndürmesi gereken koşulları tanımladığınız yerdir. Bizim durumumuzda, Find metodunun 'Chain Ring ID' ile eşleşen ilk elemanı döndürmesini istedik.

Predikatınızda tanımladığınız koşulları hiçbir eleman karşılamazsa, Find metodu varsayılan bir değer döndürecektir. Örneğin, bir tamsayı dizisi ile çalışıyorsanız ve predikatınız eşleşme bulamazsa, Find metodu C#'ta tamsayılar için varsayılan değer olan '0' döndürecektir.

Doğrusal Arama Prensibi

Not edilmesi gereken önemli bir nokta, Find fonksiyonunun tüm dizi, liste veya koleksiyon üzerinde lineer bir arama gerçekleştirdiğidir. Bu, ilk elemandan başladığı ve ardışık olarak her bir sonraki elemanı incelediği anlamına gelir; bu işlem, belirli bir koşulu sağlayan bir elemanın ilk kez bulunmasına kadar sürer.

Bazı durumlarda, ilkini değil de belirli bir koşulu sağlayan son öğeyi bulmak isteyebilirsiniz. Bu amaçla, C# sizlere FindLast fonksiyonunu sunar.

FindIndex ve FindLastIndex

Find, belirli bir predikatla eşleşen bir elemanın ilk ortaya çıkışını bulmanıza yardımcı olduğu gibi, C# şartlarınıza uyan ilk ve son elemanların indekslerini vermek için FindIndex ve FindLastIndex metotları da sağlar.

Bir örnek deneyelim:

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}");
}
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}");
}
Imports System
Imports System.Collections.Generic

Public Shared Sub Main()
	' Create a list of BikePart objects with an additional duplicate entry
	Dim bikeParts As New List(Of BikePart) From {
		New BikePart With {.Id = "Chain Ring ID"},
		New BikePart With {.Id = "Crank Arm ID"},
		New BikePart With {.Id = "Regular Seat ID"},
		New BikePart With {.Id = "Banana Seat ID"},
		New BikePart With {.Id = "Chain Ring ID"}
	}

	' Define a predicate to find a BikePart with a specific ID
	Dim findChainRingPredicate As Predicate(Of BikePart) = Function(bp As BikePart)
		Return bp.Id = "Chain Ring ID"
	End Function

	' Find the index of the first and last occurrence of the specified BikePart
	Dim firstChainRingIndex As Integer = bikeParts.FindIndex(findChainRingPredicate)
	Dim lastChainRingIndex As Integer = 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}")
End Sub
$vbLabelText   $csharpLabel

FindAll Gücü

Adından da anlaşılacağı gibi, FindAll metodu, predikatı karşılayan tüm elemanları toplar. Belirli koşullara göre öğeleri filtrelemeniz gerektiğinde kullanılır. FindAll metodu eşleşen tüm elemanlarla yeni bir Liste döndürür.

İşte bir kod örneği:

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());
    }
}
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());
    }
}
Imports System
Imports System.Collections.Generic

Public Shared Sub Main()
	' Create a list of BikePart objects with an additional duplicate entry
	Dim bikeParts As New List(Of BikePart) From {
		New BikePart With {.Id = "Chain Ring ID"},
		New BikePart With {.Id = "Crank Arm ID"},
		New BikePart With {.Id = "Regular Seat ID"},
		New BikePart With {.Id = "Banana Seat ID"},
		New BikePart With {.Id = "Chain Ring ID"}
	}

	' Define a predicate to find all BikeParts with a specific ID
	Dim findChainRingPredicate As Predicate(Of BikePart) = Function(bp As BikePart)
		Return bp.Id = "Chain Ring ID"
	End Function

	' Use FindAll to get all matching BikePart objects
	Dim chainRings As List(Of BikePart) = bikeParts.FindAll(findChainRingPredicate)

	' Print the count and details of each found BikePart
	Console.WriteLine($"Found {chainRings.Count} Chain Rings:")
	For Each chainRing As BikePart In chainRings
		Console.WriteLine(chainRing.ToString())
	Next chainRing
End Sub
$vbLabelText   $csharpLabel

IronPDF'yi İşin İçine Katmak

C# Find bilgimizin kullanılabileceği önemli bir alan, PDF işleme için güçlü bir C# kütüphanesi olan IronPDF kullanarak PDF içerik manipülasyonudur.

Bir PDF belgesi üzerinde çalıştığımızı ve bu belgede çeşitli bisiklet parçaları hakkında bilgiler olduğunu varsayalım. Çoğu zaman, bu içeriğin belirli kısımlarını bulmamız gerekir. Bu, IronPDF ile C# Find yönteminin güçlü bir çözüm sunmak için birleştiği yerdir.

Öncelikle, IronPDF ile PDF'imizden metni çıkartabiliriz ve sonra çıkartılan metinde belirli bir kısmı bulmak için daha önce öğrendiğimiz Find veya FindAll metodunu kullanabiliriz.

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);
        }
    }
}
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);
        }
    }
}
Imports Microsoft.VisualBasic
Imports IronPdf
Imports System
Imports System.Collections.Generic
Imports System.Linq

Public Class Program
	Public Shared Sub Main()
		' Load and extract text from a PDF document
		Dim pdf As PdfDocument = PdfDocument.FromFile("C:\Users\Administrator\Desktop\bike.pdf")
		Dim pdfText As String = pdf.ExtractAllText()

		' Split the extracted text into lines
		Dim pdfLines As List(Of String) = pdfText.Split(ControlChars.Lf).ToList()

		' Define a predicate to find lines that contain a specific text
		Dim findChainRingPredicate As Predicate(Of String) = Function(line As String)
			Return line.Contains("Chain Ring ID")
		End Function

		' Use FindAll to get all lines containing the specified text
		Dim chainRingLines As List(Of String) = pdfLines.FindAll(findChainRingPredicate)

		' Print the count and content of each found line
		Console.WriteLine($"Found {chainRingLines.Count} lines mentioning 'Chain Ring ID':")
		For Each line As String In chainRingLines
			Console.WriteLine(line)
		Next line
	End Sub
End Class
$vbLabelText   $csharpLabel

Bu kodda, bir PDF yükledik, metni çıkarttık, satırlara ayırdık ve sonra 'Chain Ring ID' bahseden tüm satırları bulmak için FindAll kullandık.

VB.NET'te PDF Dosyalarını Görüntüleme: Şekil 1

Bu, Find metodunun IronPDF ile birlikte pratik bir senaryoda nasıl kullanılabileceğine dair basit bir örnektir. C# dilinin fayda ve çok yönlülüğünü, programlama görevlerinizi daha kolay ve verimli hale getiren güçlü kütüphaneleri ile birlikte göstermektedir.

Sonuç

Bu eğitimde, C# Find metodu ve onunla ilgili FindIndex, FindLastIndex ve FindAll konularına derinlemesine girdik. Kullanım alanlarını inceledik, bazı kod örneklerini keşfettik ve en etkili oldukları durumları ortaya çıkardık.

Ayrıca IronPDF kütüphanesini kullanarak PDF işleme dünyasına adım attık. Aynı şekilde, bir PDF dokümanı içerisinde içeriği çıkartma ve arama yaparak Find metodunun bilgilerini pratik bir uygulamada gördük.

IronPDF, IronPDF'yi deneme imkanı sunar, bu da işlevselliğini keşfetmek ve C# projelerinize nasıl fayda sağlayabileceğini belirlemek için mükemmel bir fırsat sağlar. Denemeden sonra IronPDF kullanmaya devam etmeye karar verirseniz, lisanslar $999'dan başlamaktadır.

Sıkça Sorulan Sorular

C# Bul fonksiyonu geliştiriciler için nasıl çalışır?

C# Bul fonksiyonu, geliştiricilerin bir koleksiyon, dizi veya listede bir predikat tarafından tanımlanan belirli koşulları sağlayan ilk öğeyi bulmalarına olanak tanır. Bu özellik, kodlama sürecini basitleştirmek için kullanışlıdır.

Predikat nedir ve C#'ta nasıl kullanılır?

C#'ta bir predikat, belirli bir koşula sahip bir yöntemi temsil eden bir delegedir. Bul gibi yöntemlerde koleksiyonlardaki her öğeyi test etmek için kullanılır ve kriterleri karşılayanları döndürür.

Bul yöntemini C#'ta özel bir sınıfla kullanabilir miyim?

Evet, sınıfın öğeleri için arama kriterlerine uyan bir predikat tanımlayarak özel bir sınıfla Bul yöntemini kullanabilirsiniz, örneğin belirli bir özelliğe sahip bir nesne bulmak.

Bul yönteminde kriterlere uyan öğe bulunmazsa ne olur?

Bul yöntemindeki predikat tarafından belirtilen kriterlere uyan öğe bulamazsa, referans türleri için null veya değer türleri için 0 gibi varsayılan bir değer döner.

C#'ta Bul ve FindAll arasındaki farklar nelerdir?

Bul yöntemi predikatı karşılayan ilk öğeyi dönerken, FindAll predikat koşullarını karşılayan tüm öğelerin listesini döner.

FindIndex ve FindLastIndex yöntemleri nasıl farklılık gösterir?

FindIndex, predikatı karşılayan ilk öğenin indeksini dönerken; FindLastIndex, kriterleri karşılayan son öğenin indeksini döner.

Metin araması için bir PDF kütüphanesini C# Bul ile nasıl entegre edebilirim?

Bir PDF kütüphanesi kullanarak PDF'lerden metin çıkarabilir ve metin içinde belirli içerikleri aramak için Bul yöntemini kullanarak belge işleme konusunda etkili hale getirebilirsiniz.

Find yöntemini özellikleriyle öğeleri aramak için kullanmak mümkün mü?

Evet, belirli bir ID veya özellikle bir nesneyi bulmak gibi belirli kriterleri aramak için öğe özelliklerine dayanan bir predikat tanımlayabilirsiniz.

Büyük veri koleksiyonları için Bul yöntemi ne kadar verimlidir?

Bul yöntemi sırayla her öğeyi kontrol eden bir lineer arama gerçekleştirir. Basittir ama O(n) karmaşıklığı nedeniyle çok büyük koleksiyonlar için en verimli yöntem olmayabilir.

Bir PDF kütüphanesi C# geliştiricileri için ne tür faydalar sunar?

Bir PDF kütüphanesi, geliştiricilerin C# kullanarak PDF içeriğini kolayca çıkarmalarına, düzenlemelerine ve aramalarına olanak tanıyan güçlü PDF işleme yetenekleri sunarak, belgeye ilişkin görevlerin verimliliğini artırır.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Teknoloji Direktörü

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara