Maison >développement back-end >C++ >Comment puis-je accéder à l'indice d'itération actuel dans une boucle C # foreach?

Comment puis-je accéder à l'indice d'itération actuel dans une boucle C # foreach?

Barbara Streisand
Barbara Streisandoriginal
2025-01-27 18:01:10532parcourir

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

Récupération de l'index d'itération dans une boucle C # foreach

C # 'S foreach Loop ne fournit pas intrinsèquement l'accès à l'indice d'itération. Cependant, nous pouvons habilement utiliser la méthode Select de Linq pour y parvenir.

L'approche d'Ian Mercer, en utilisant la surcharge de Select qui accepte une expression de lambda avec des paramètres de valeur et d'index, est très efficace:

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

L'expression lambda (value, i) => new { i, value } crée un objet anonyme contenant à la fois l'élément (value) et son index (i).

Pour de meilleures performances et pour éviter les allocations de tas inutiles (particulièrement bénéfiques avec les grandes collections), envisagez d'utiliser ValueTuple (disponible à partir de C # 7.0):

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

Encore plus concise, et en tirant parti des capacités de destructeur de C #, nous pouvons accéder directement à la valeur et à l'index:

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

Ces méthodes vous permettent efficacement d'obtenir l'index d'itération actuel tout en utilisant une boucle foreach, offrant un contrôle et une flexibilité plus importants dans votre code.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn