C#: astuce avec foreach

AJA que l’on pouvait obtenir l’index dans une boucle foreach d’une façon assez pratique sans avoir à incrémenter un compteur à la main (ce qui est vulgaire 😏). La fonction Select de Linq possède en effet un overload qui prend une lambda prenant en charge l’index de boucle.

Avant C#7:

1
2
3
foreach(var item in inputList.Select((wheel, i) => new { wheel, i})) {
Console.WriteLine($"Wheel n°{item.i + 1} : {item.wheel.friction}");
}

Mais ce n’est pas super car on se trimballe un item dont on se passerait bien.

Heureusement, depuis C#7 (avec la déconstruction de Tuples), on peut directement assigner les variables :

1
2
3
foreach((Wheel wheel, int i) in inputList.Select((value, i) => (wheel, i))) {
Console.WriteLine($"Numero {i + 1} : {wheel.friction}");
}

Attention cependant, ça peut vite nuire à la lisibilité du code car on est forcé de spécifier les types et l’instruction foreach devient vite indigeste sur une ligne.