We're in the home stretch. It's day 23 of the Blogging A-to-Z challenge and it's time to loop-the-loop.
C# has a number of ways to iterate over a collection of things, and a base interface that lets you know you can use an iterator.
The simplest ways to iterate over code is to use while
, which just keeps looping until a condition is met:
var n = 1;
while (n < 6)
{
Console.WriteLine($"n = {n}");
n++;
}
Console.WriteLine("Done");
while
is similar to do
:
var n = 1;
do
{
Console.WriteLine($"n = {n}");
n++;
} while (n < 6);
Console.WriteLine("Done");
The main difference is that the do
loop will always execute once, but the while
loop may not.
The next level up is the for
loop:
for (var n = 1; n < 6; n++)
{
Console.WriteLine($"n = {n}");
}
Console.WriteLine("Done");
Similar, no?
Then there is foreach
, which iterates over a set of things. This requires a bit more explanation.
The base interface IEnumerable
and its generic equivalent IEnumerable<T>
expose a single method, GetEnumerator
(or GetEnumerator<T>
) that foreach
uses to go through all of the items in the class. Generally, anything in the BCL that holds a set of objects implements IEnumerable
: System.Array
, System.Collections.ICollection
, System.Collections.Generic.List<T>
...and many, many others. Each of these classes lets you manipulate the set of objects the thing contains:
var things = new[] { 1, 2, 3, 4, 5 }; // array of int, or int[]
foreach(var it in things)
{
Console.WriteLine(it);
}
foreach
will iterate over all the things in the order they were added to the array. But it also works with LINQ to give you even more power:
var things = new List<int> {1, 2, 3, 4, 5};
foreach (var it in things.Where(p => p % 2 == 0))
{
Console.WriteLine(it);
}
Three guesses what that snippet does.
These keywords and structures are so fundamental to C#, I recommend reading up on them.