Counter in foreach loop in C# -
working of foreach: know,
foreach loop iterates through collection or array 1 one, starting 0 index till last item of collection.
so, if have n items in array.
foreach (var item in arr) { } then, in, 1st iteration, item=arr[0];
then, in 2nd, item=arr[1];
.
.
.
in last (nth), item=arr[n-1];
conclusion: working seems @ each iteration knows value taken array or knows index of item taken array.
now question: how can index of item without using new variable?
foreach (string item in mylist) { if (item == "myitem") { // index of item break; } }
it depends mean "it". iterator knows index it's reached, yes - in case of list<t> or array. there's no general index within ienumerator<t>. whether it's iterating on indexed collection or not implementation. plenty of collections don't support direct indexing.
(in fact, foreach doesn't use iterator @ all. if compile-time type of collection array, compiler iterate on using array[0], array[1] etc. likewise collection can have method called getenumerator() returns type appropriate members, without implementation of ienumerable/ienumerator in sight.)
options maintaining index:
- use
forloop - use separate variable
use projection projects each item index/value pair, e.g.
foreach (var x in list.select((value, index) => new { value, index })) { // use x.value , x.index in here }use
smartenumerableclass little bit previous option
all first of these options work whether or not collection naturally indexed.
Comments
Post a Comment