(C#) Get index of current foreach iteration
- by Graphain
Hi,
Is there some rare language construct I haven't encountered (like the few I've learned recently, some on Stack Overflow) in C# to get a value representing the current iteration of a foreach loop?
For instance, I currently do something like this depending on the circumstances:
int i=0;
foreach (Object o in collection)
{
...
i++;
}
Answers:
@bryansh: I am setting the class of an element in a view page based on the position in the list. I guess I could add a method that gets the CSSClass for the Objects I am iterating through but that almost feels like a violation of the interface of that class.
@Brad Wilson: I really like that - I've often thought about something like that when using the ternary operator but never really given it enough thought.
As a bit of food for thought it would be nice if you could do something similar to somehow add (generically to all IEnumerable objects) a handle on the enumerator to increment the value that an extension method returns i.e. inject a method into the IEnumerable interface that returns an iterationindex.
Of course this would be blatant hacks and witchcraft... Cool though...
@crucible: Awesome I totally forgot to check the LINQ methods. Hmm appears to be a terrible library implementation though. I don't see why people are downvoting you though. You'd expect the method to either use some sort of HashTable of indices or even another SQL call, not an O(N) iteration... (@Jonathan Holland yes you are right, expecting SQL was wrong)
@Joseph Daigle: The difficulty is that I assume the foreach casting/retrieval is optimised more than my own code would be.
@Jonathan Holland: Ah, cheers for explaining how it works and ha at firing someone for using it.