What if you could find exactly what you want in a list with just a simple rule, no matter how long it is?
Why List patterns in C Sharp (C#)? - Purpose & Use Cases
Imagine you have a list of your favorite movies written on paper. You want to find all movies that start with the letter 'A'. You have to look at each movie one by one, which takes a lot of time and effort.
Manually checking each item is slow and easy to mess up. If the list is long, you might miss some movies or make mistakes. It's like searching for a needle in a haystack without any tools.
List patterns let you quickly find, filter, or organize items in a list using simple rules. Instead of checking each item yourself, you tell the program what to look for, and it does the hard work fast and correctly.
foreach (var movie in movies) { if (movie.StartsWith("A")) { Console.WriteLine(movie); } }
var moviesStartingWithA = movies.Where(movie => movie.StartsWith("A")); foreach (var movie in moviesStartingWithA) { Console.WriteLine(movie); }
List patterns make it easy to find and work with exactly the items you want, saving time and avoiding mistakes.
When you shop online, list patterns help show only the products you want, like filtering by price or brand, so you don't have to scroll through everything.
Manual searching in lists is slow and error-prone.
List patterns let programs quickly find items by simple rules.
This saves time and makes your code cleaner and easier to understand.
Practice
[] match in C#?Solution
Step 1: Understand the empty list pattern
The pattern[]is used to match lists that have no elements at all.Step 2: Compare with other list patterns
Patterns like[var x]match one element, and[var x, .. var rest]match lists with multiple elements, so they don't match empty lists.Final Answer:
An empty list with no elements -> Option AQuick Check:
Empty list = [] pattern [OK]
- Confusing [] with single element pattern
- Thinking [] matches any list
- Assuming [] matches lists with elements
Solution
Step 1: Identify the pattern for one element
The pattern[var x]matches a list with exactly one element, binding it tox.Step 2: Understand other patterns
[var x, .. var rest]matches lists with at least one element plus the rest,[.. var rest]matches any list, and[]matches empty lists.Final Answer:
[var x] -> Option BQuick Check:
One element list = [var x] [OK]
- Using [var x, .. var rest] for single element
- Using [] for single element list
- Confusing .. var rest with single element
var list = new List<int> { 5, 10, 15 };
switch (list)
{
case []:
Console.WriteLine("Empty");
break;
case [var x]:
Console.WriteLine($"One element: {x}");
break;
case [var x, .. var rest]:
Console.WriteLine($"First: {x}, Rest count: {rest.Count}");
break;
}Solution
Step 1: Analyze the list contents
The list has three elements: 5, 10, and 15.Step 2: Match the list pattern cases
The first case matches empty list, which is false. The second case matches exactly one element, which is false. The third case matches a list with at least one element:[var x, .. var rest]. Here,xis 5, andrestcontains 10 and 15, so count is 2.Final Answer:
First: 5, Rest count: 2 -> Option DQuick Check:
List with 3 elements matches [x, ..rest] pattern [OK]
- Choosing empty or one element case incorrectly
- Miscounting rest elements
- Ignoring pattern order in switch
var numbers = new List<int> { 1, 2, 3 };
if (numbers is [var first, var second])
{
Console.WriteLine($"First: {first}, Second: {second}");
}Solution
Step 1: Understand the pattern [var first, var second]
This pattern matches lists with exactly two elements, binding them tofirstandsecond.Step 2: Check the list size
The list has three elements: 1, 2, and 3, so it does not match the pattern requiring exactly two elements.Final Answer:
The pattern [var first, var second] requires exactly two elements, but list has three -> Option CQuick Check:
Pattern length must match list length exactly [OK]
- Assuming pattern matches partial list
- Thinking variable names cause error
- Ignoring list size in pattern matching
Solution
Step 1: Understand the requirement
The list must start with 1, then have a second element, and then zero or more elements after that (at least two elements total).Step 2: Analyze each pattern
[1, var second, .. var rest]:[1, var second, .. var rest]matches a list starting with 1, then a second element, then the rest (zero or more). This fits the requirement.
[var first, 1, .. var rest]:[var first, 1, .. var rest]matches lists where the second element is 1, not the first.
[1, .. var rest]:[1, .. var rest]matches lists starting with 1 but allows zero or more elements after, so it matches lists with only one element too.
[.. var rest, 1]:[.. var rest, 1]matches lists ending with 1, not starting.Final Answer:
[1, var second, .. var rest] -> Option AQuick Check:
Start with 1 and at least two elements = [1, var second, .. rest] [OK]
- Confusing element positions in pattern
- Using patterns that allow only one element
- Matching end of list instead of start
Ready to prove it?
Pass the test and this pattern moves unknown
