Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh mengakses indeks lelaran semasa dalam gelung c# foreach?

Bagaimanakah saya boleh mengakses indeks lelaran semasa dalam gelung c# foreach?

Barbara Streisand
Barbara Streisandasal
2025-01-27 18:01:10530semak imbas

How Can I Access the Current Iteration Index in a C# foreach Loop?

Mengambil semula Indeks Lelaran dalam C# foreach Gelung

Gelung foreach C# tidak semestinya menyediakan akses kepada indeks lelaran. Walau bagaimanapun, kita boleh menggunakan kaedah Select LINQ dengan bijak untuk mencapainya.

Pendekatan Ian Mercer, menggunakan lebihan Select yang menerima ungkapan lambda dengan nilai dan parameter indeks, adalah sangat berkesan:

<code class="language-csharp">foreach (var item in Model.Select((value, i) => new { i, value }))
{
    var value = item.value;
    var index = item.i;
}</code>

Ungkapan lambda (value, i) => new { i, value } mencipta objek tanpa nama yang mengandungi kedua-dua item (value) dan indeksnya (i).

Untuk prestasi yang lebih baik dan untuk mengelakkan peruntukan timbunan yang tidak perlu (terutamanya berfaedah dengan koleksi yang besar), pertimbangkan untuk menggunakan ValueTuple (tersedia dari C# 7.0 dan seterusnya):

<code class="language-csharp">foreach (var item in Model.Select((value, i) => (value, i)))
{
    var value = item.value;
    var index = item.i;
}</code>

Lebih ringkas lagi, dan memanfaatkan keupayaan pemusnahan C#, kami boleh terus mengakses nilai dan indeks:

<code class="language-csharp">foreach (var (value, i) in Model.Select((value, i) => (value, i)))
{
    // Access `value` and `i` directly here.
}</code>

Kaedah ini dengan berkesan membolehkan anda memperoleh indeks lelaran semasa semasa menggunakan gelung foreach, memberikan kawalan dan fleksibiliti yang lebih besar dalam kod anda.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengakses indeks lelaran semasa dalam gelung c# foreach?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn