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!