IRONSOFTWAREHOME
GELIŞTIRICI GÜNCELLEMELERI

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

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Jacob Mellor
Updated: 21 Nisan 2026

C#'ta, foreach ifadesi, genellikle diziler, listeler veya diğer sayılabilir türler gibi koleksiyonlar üzerinde yinelemek için kullanılır. Ancak, bir sınırlama olarak, foreach döngüsü mevcut yinelemeyi izlemek için yerleşik bir indeks değişkeni sağlamaz. Geliştiriciler genellikle geçerli elemanın indeksine erişmeye ihtiyaç duyar. Aşağıda, bu işlevselliği ve IronPDF kütüphanesini uygulamanın çeşitli yollarını keşfedeceğiz.

Foreach Döngüsünün Temelleri

Foreach döngüsü, diziler, listeler, sözlükler ve IEnumerable'ı uygulayan diğer türler arasında dolaşmayı kolaylaştırmak için tasarlanmıştır. İşte bir tamsayı veri türü dizisini döngülemek için bir foreach ifadesi kullanmanın temel bir örneği:

int[] numbers = { 10, 20, 30, 40 };
foreach (int number in numbers)
{
    Console.WriteLine(number);
}

Bu örnekte, number her yineleme sırasında koleksiyonun elemanını temsil eder. Döngü, dizideki tüm elemanlar otomatik olarak üzerinden geçer. Ancak, geçerli elemanın indeksine erişmek için yerleşik bir yol yoktur.

Foreach Döngüsünde İndeks İşleme

Her ne kadar C# doğrudan foreach döngüsünde indeks sağlamasa da, birkaç teknik bunu çözebilir. Bu yöntemleri detaylı olarak tartışalım.

Yöntem 1: Ayrı Bir Değişken Kullanma

Geçerli elemanın indeksini almanın en basit yollarından biri, harici bir indeks değişkeni kullanmaktır. Döngü sırasında manuel olarak artırmanız gerekecektir:

int[] numbers = { 10, 20, 30, 40 };
int numberIndex = 0;
foreach (int number in numbers)
{
    Console.WriteLine($"Index: {numberIndex}, Value: {number}");
    numberIndex++;
}

Bu kodda, indeks değişkeni döngü başlamadan önce başlatılır ve ardından her iterasyon sırasında döngü içinde artırılır. Bu yaklaşım işe yarasa da, her zaman ideal olmayan şekilde manuel olarak indeksi tutmayı gerektirir.

Yöntem 2: LINQ'nun Select Yöntemini Kullanma

LINQ'un Select yöntemi, bir koleksiyonun her elemanını yeni bir forma, indeksini de içerecek şekilde, projelendirmek için kullanılabilir. İşte bir örnek:

int[] numbers = { 10, 20, 30, 40 };
foreach (var item in numbers.Select((value, index) => new { value, index }))
{
    Console.WriteLine($"Index: {item.index}, Value: {item.value}");
}

Bu örnekte, Select hem mevcut elemanın değerini hem de indeksini içeren anonim bir nesne oluşturur. Foreach döngüsü bu nesneler üzerinde iterasyon yapabilir ve hem indeks hem de değeri doğrudan erişebilir.

Yöntem 3: Özel Bir İteratör Kullanma

Mevcut elemanı ve indeksini sağlayan bir yöntem oluşturmak için yield return anahtar kelimesini kullanarak özel bir iteratör uzantı metodu uygulayabilirsiniz. Bu, biraz daha gelişmiş ama esnek bir çözüm sunar.

public static IEnumerable<(int index, T value)> WithIndex<t>(this IEnumerable<t> source)
{
    int index = 0;
    foreach (T value in source)
    {
        yield return (index, value);
        index++;
    }
}

Artık koleksiyonlarınızla bu uzantı yöntemini kullanabilirsiniz:

int[] numbers = { 10, 20, 30, 40 };
foreach (var (index, value) in numbers.WithIndex())
{
    Console.WriteLine($"Index: {index}, Value: {value}");
}

Bu yaklaşım, manuel indeks yönetimini tekrarlanabilir bir metoda soyutlayarak, indeks sorunu olan foreach için daha zarif bir çözüm yaratır.

İndeksleri Erişmek İçin While Döngüsü Kullanma

Eğer diziler veya listeler gibi koleksiyonlarla çalışıyorsanız, indeks değişkeniyle birlikte bir while döngüsü kullanarak hem indkesi hem de geçerli elemana erişebilirsiniz:

int[] numbers = { 10, 20, 30, 40 };
int index = 0;
while (index < numbers.Length)
{
    Console.WriteLine($"Index: {index}, Value: {numbers[index]}");
    index++;
}

C# indeks ile foreach (Geliştiriciler İçin Nasıl Çalışır): Şekil 1 - İndeksler Çıktısı

Bu yöntem, indeks değişkenini dizinin veya listenin bir alt yazıtı olarak kullanarak hem indekse hem de geçerli elemana doğrudan erişmenizi sağlar.

.NET'te Özel Koleksiyonlar ve İteratörler

Özel hale getirilmiş koleksiyonlar ile çalışıyorsanız, indeksli erişimi desteklemek için kendi iteratörlerinizi uygulayabilirsiniz. IEnumerable arayüzünü uygulayarak ve yield return ifadesini kullanarak, hem elemanı hem de indeksini döndüren iteratörler oluşturabilirsiniz.

IEnumerable arayüzünü uygulayan özel bir koleksiyon oluşturma örneği:

public class CustomCollection<t> : IEnumerable<t>
{
    private T[] _items;
    public CustomCollection(T[] items)
    {
        _items = items;
    }
    public IEnumerator<t> GetEnumerator()
    {
        for (int i = 0; i < _items.Length; i++)
        {
            yield return _items[i];
        }
    }
    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

Bu özel koleksiyonu bir foreach döngüsünde kullanabilirsiniz:

var customCollection = new CustomCollection<int>(new int[] { 10, 20, 30, 40 });
foreach (int number in customCollection)
{
    Console.WriteLine(number);
}

GetEnumerator yöntemini uygulayarak ve yield return kullanarak, .NET'teki herhangi bir koleksiyon gibi özel koleksiyonunuzla çalışmasına izin veren bir foreach döngüsü sağlayan bir iteratör oluşturursunuz.

Sözlükleri Kullanarak Anahtar-Değer Çiftlerine İterasyon

Sözlükler ile çalışırken, foreach döngüsü anahtar-değer çiftleri üzerinde doğrudan iterasyon yapmanıza izin verir. Her iterasyonda hem anahtara hem de değere erişmenin yaygın bir kullanım durumu:

Dictionary<int, string> dict = new Dictionary<int, string>
{
    { 1, "Apple" },
    { 2, "Banana" },
    { 3, "Cherry" }
};
foreach (var kvp in dict)
{
    Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}

Bu örnekte, kvp.Key size mevcut anahtarı verir ve kvp.Value size mevcut değeri verir.

IronPDF'nin C# foreach Döngüsü ve İndeks ile Kullanımı

C# indeks ile foreach (Geliştiriciler İçin Nasıl Çalışır): Şekil 2 - IronPDF

IronPDF, C#'ta PDF oluşturma ve diğer PDF ile ilgili görevleri HTML'den PDF oluşturma ile halletmek için bir PDF kütüphanesidir. Ayrıca en son .NET Framework ile de uyumludur. IronPDF kullanarak PDF'ler oluştururken, bir veri koleksiyonuna iterasyon yaparken ve içeriği dinamik olarak PDF dosyanıza eklemeniz gerekebilir. For döngüsünün indeks yönetimiyle birleştirilmesi, güncel öğenin indeksine dayanarak konumlandırma, numaralandırma veya özel mantığı yönetmenize olanak tanır. İşte her bir koleksiyon öğesinin indeksinin yanında belgeye eklenerek IronPDF kullanarak bir PDF oluşturmanın pratik bir örneği.

using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        // Create a new PDF document renderer
        var pdf = new ChromePdfRenderer();
        
        // Sample data array
        string[] items = { "First Item", "Second Item", "Third Item" };
        
        // Initialize the HTML content with foreach loop and index
        string htmlContent = "<html><body>";
        int index = 0;
        foreach (var item in items)
        {
            htmlContent += $"<h2>Item {index + 1}: {item}</h2>";
            index++;
        }
        htmlContent += "</body></html>";
        
        // Render the HTML to PDF
        var pdfDocument = pdf.RenderHtmlAsPdf(htmlContent);
        
        // Save the PDF document
        pdfDocument.SaveAs("output.pdf");
        
        // Notify completion
        Console.WriteLine("PDF created successfully with indexed items.");
    }
}

İşte çıktı PDF dosyası:

C# indeks ile foreach (Geliştiriciler İçin Nasıl Çalışır): Şekil 3 - PDF Çıktısı

Sonuç

C#'ta, foreach döngüsü koleksiyonlar üzerinde yineleme yapmak için uygun bir yol olsa da, yerel indeks desteği eksiktir. Bu sınırlamayı aşmanın birkaç yolu vardır. Basit bir indeks değişkeni, LINQ'tan Select yöntemi veya özel iteratörler kullanmanız fark etmeksizin, yineleme sırasında mevcut veya bir sonraki elemanın indeksine erişebilirsiniz. Bu teknikleri anlamak, özellikle her bir elemanın indeksini bilmeniz gerektiğinde, foreach döngüsünü daha verimli bir şekilde kullanmanıza yardımcı olabilir.

IronPDF ile hemen taahhüt etmenize gerek yok. Yazılımın yeteneklerini derinlemesine keşfetmenizi sağlayan ücretsiz bir deneme sunuyoruz. Gördüklerinizi beğendiyseniz, lisanslar $999'dan başlamaktadı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 ve NASA, Tesla ve dünya genelindeki devlet kurumlarına hizmet etmektedir.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez