Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharpNotesForProfessionals.pdf
Скачиваний:
65
Добавлен:
20.05.2023
Размер:
6.12 Mб
Скачать

Chapter 28: Looping

Section 28.1: For Loop

A For Loop is great for doing things a certain amount of time. It's like a While Loop but the increment is included with the condition.

A For Loop is set up like this:

for (Initialization; Condition; Increment)

{

// Code

}

Initialization - Makes a new local variable that can only be used in the loop.

Condition - The loop only runs when the condition is true.

Increment - How the variable changes every time the loop runs.

An example:

for (int i = 0; i < 5; i++)

{

Console.WriteLine(i);

}

Output:

0

1

2

3

4

You can also leave out spaces in the For Loop, but you have to have all semicolons for it to function.

int input = Console.ReadLine();

for ( ; input < 10; input + 2)

{

Console.WriteLine(input);

}

Output for 3:

3

5

7

9

11

GoalKicker.com – C# Notes for Professionals

119

Section 28.2: Do - While Loop

It is similar to a while loop, except that it tests the condition at the end of the loop body. The Do - While loop executes the loop once irrespective of whether the condition is true or not.

int[] numbers = new int[] { 6, 7, 8, 10 };

//Sum values from the array until we get a total that's greater than 10,

//or until we run out of values.

int sum = 0; int i = 0; do

{

sum += numbers[i]; i++;

} while (sum <= 10 && i < numbers.Length);

System.Console.WriteLine(sum); // 13

Section 28.3: Foreach Loop

foreach will iterate over any object of a class that implements IEnumerable (take note that IEnumerable<T> inherits

from it). Such objects include some built-in ones, but not limit to: List<T>, T[] (arrays of any type),

Dictionary<TKey, TSource>, as well as interfaces like IQueryable and ICollection, etc.

syntax

foreach(ItemType itemVariable in enumerableObject) statement;

remarks

1.The type ItemType does not need to match the precise type of the items, it just needs to be assignable from the type of the items

2.Instead of ItemType, alternatively var can be used which will infer the items type from the enumerableObject by inspecting the generic argument of the IEnumerable implementation

3.The statement can be a block, a single statement or even an empty statement (;)

4.If enumerableObject is not implementing IEnumerable, the code will not compile

5.During each iteration the current item is cast to ItemType (even if this is not specified but compiler-inferred via var) and if the item cannot be cast an InvalidCastException will be thrown.

Consider this example:

var list = new List<string>(); list.Add("Ion"); list.Add("Andrei"); foreach(var name in list)

{

Console.WriteLine("Hello " + name);

}

is equivalent to:

var list = new List<string>(); list.Add("Ion"); list.Add("Andrei");

GoalKicker.com – C# Notes for Professionals

120

IEnumerator enumerator; try

{

enumerator = list.GetEnumerator(); while(enumerator.MoveNext())

{

string name = (string)enumerator.Current; Console.WriteLine("Hello " + name);

}

}

finally

{

if (enumerator != null) enumerator.Dispose();

}

Section 28.4: Looping styles

While

The most trivial loop type. Only drawback is there is no intrinsic clue to know where you are in the loop.

/// loop while the condition satisfies while(condition)

{

/// do something

}

Do

Similar to while, but the condition is evaluated at the end of the loop instead of the beginning. This results in executing the loops at least once.

do

{

///do something

}while(condition) /// loop while the condition satisfies

For

Another trivial loop style. While looping an index (i) gets increased and you can use it. It is usually used for handling arrays.

for ( int i = 0; i < array.Count; i++ )

{

var currentItem = array[i];

/// do something with "currentItem"

}

Foreach

Modernized way of looping through IEnumarable objects. Good thing that you don't have to think about the index of the item or the item count of the list.

foreach ( var item in someList )

{

/// do something with "item"

GoalKicker.com – C# Notes for Professionals

121

}

Foreach Method

While the other styles are used for selecting or updating the elements in collections, this style is usually used for calling a method straight away for all elements in a collection.

list.ForEach(item => item.DoSomething());

// or

list.ForEach(item => DoSomething(item));

// or using a method group list.ForEach(Console.WriteLine);

// using an array

Array.ForEach(myArray, Console.WriteLine);

It is important to note that this method in only available on List<T> instances and as a static method on Array - it is not part of Linq.

Linq Parallel Foreach

Just like Linq Foreach, except this one does the job in a parallel manner. Meaning that all the items in the collection will run the given action at the same time, simultaneously.

collection.AsParallel().ForAll(item => item.DoSomething());

/// or

collection.AsParallel().ForAll(item => DoSomething(item));

Section 28.5: Nested loops

// Print the multiplication table up to 5s for (int i = 1; i <= 5; i++)

{

for (int j = 1; j <= 5; j++)

{

int product = i * j;

Console.WriteLine("{0} times {1} is {2}", i, j, product);

}

}

Section 28.6: continue

In addition to break, there is also the keyword continue. Instead of breaking completely the loop, it will simply skip the current iteration. It could be useful if you don't want some code to be executed if a particular value is set.

Here's a simple example:

for (int i = 1; i <= 10; i++)

{

if (i < 9) continue;

Console.WriteLine(i);

GoalKicker.com – C# Notes for Professionals

122