Statements#
The if, for, while, and do while statements look identical to those in C++. The only difference is the logical condition in these statements, which must evaluate to a boolean value.
The switch statement#
Unlike in C++, the switch statement in C# does not allow control to fall through from one case block to the next implicitly. However, you can attach multiple case labels to a single block.
In addition to matching constants, the switch statement can use pattern matching for any pattern. You can find a full list of them in the Patterns lecture.
Additionally, after the pattern, we can provide an additional condition that will be considered after the pattern is checked.
switch (expression)
{
case pattern:
statement list
case pattern:
case pattern when condition: // optional case guard
statement list
default:
statement list
}An example of a statement with the two most commonly used types of patterns and an optional condition:
void TellMeAboutTheObject(object obj)
{
switch (obj)
{
case 0: // constant pattern
Console.WriteLine("It's a zero.");
break;
case string str: // type pattern
Console.WriteLine($"It's a string: {str}");
break;
// type pattern with case guard
case DateTime dt when dt.DayOfWeek == DayOfWeek.Monday:
Console.WriteLine("It's a Monday");
break;
default:
Console.WriteLine("IDK");
break;
}
}The switch expression#
The switch expression is more concise and is used to return a single value based on pattern matching.
In this case, every case must be handled; otherwise, the runtime throws an exception. The equivalent of default in a switch expression is the discard pattern _.
type variable = input expression switch
{
pattern => candidate expression ,
pattern when condition => candidate expression ,
pattern => candidate expression
}Example:
string cardName = cardNumber switch
{
13 => "King", // constant pattern
12 => "Queen",
11 => "Jack",
> 1 and < 11 => "Pip card", // relational pattern
1 => "Ace",
// discard pattern, equivalent of default:
_ => throw new ArgumentOutOfRangeException()
};The foreach statement#
Similar to C++, in C# we have a range for loop, but with a slightly different syntax. It can be used on anything that is iterable. For example, all built-in collections, arrays, and strings are iterable. We will discuss what makes something iterable later when talking about enumerators.
int[] array = new int[] {0, 1, 2, 3, 4};
foreach (var i in array)
Console.WriteLine(i);
foreach (char c in "foreach")
Console.WriteLine(c);