Recursive pattern matching allows you to match nested data structures by checking patterns inside patterns, making it easy to work with complex objects step-by-step.
Click to reveal answer
beginner
How does recursive pattern matching differ from simple pattern matching?
Simple pattern matching checks one level of an object, while recursive pattern matching checks inside nested objects or properties, going deeper into the structure.
Click to reveal answer
intermediate
Explain the syntax of recursive pattern matching with an example.
You use nested patterns inside parentheses. For example:
obj is Point { X: 0, Y: 0 }
matches a Point with X and Y properties. You can nest patterns like:
Recursive pattern matching is used to analyze data by breaking it down into smaller parts recursively.
Step 2: Identify the purpose from options
To break down complex data structures step-by-step correctly states that it breaks down complex data structures step-by-step, which matches the concept.
Final Answer:
To break down complex data structures step-by-step -> Option A
Quick Check:
Recursive pattern matching = step-by-step data breakdown [OK]
Hint: Think: recursive means breaking down data stepwise [OK]
Common Mistakes:
Confusing recursion with infinite loops
Thinking it declares variables
Assuming it handles exceptions
2. Which of the following is the correct syntax to use recursive pattern matching in a C# switch expression?
easy
A. case Node(var value, var next):
B. case Node[value, next]:
C. case Node->(value, next):
D. case Node[value; next]:
Solution
Step 1: Recall C# recursive pattern syntax
In C#, recursive patterns use parentheses with variables inside, like Node(var value, var next).
Step 2: Compare options to correct syntax
case Node(var value, var next): matches the correct syntax. Other options use invalid symbols like brackets or arrows.
C. The pattern 'Node(var v, var n)' is invalid syntax
D. The order of cases should have 'null' before 'Node' to avoid errors
Solution
Step 1: Check switch expression order and syntax
In C#, switch expressions check patterns top to bottom. Here, 'Node' pattern matches non-null nodes, and 'null' matches null nodes. The order is valid.
Step 2: Verify syntax correctness
The pattern syntax and semicolons are correct. No syntax errors exist.
Final Answer:
No error, code works correctly -> Option B
Quick Check:
Pattern order and syntax are valid [OK]
Hint: Null pattern can be last in switch expressions [OK]
Common Mistakes:
Thinking null must come first
Assuming missing semicolon error
Misreading pattern syntax
5. Given a binary tree defined as:
record TreeNode(int Value, TreeNode? Left, TreeNode? Right);
Write a recursive pattern matching expression to calculate the sum of all values in the tree. Which of the following switch expressions correctly implements this?
hard
A. node switch { null => 0, TreeNode(v, l, r) => v + Sum(l) + Sum(r) }
B. node switch { TreeNode(v, l, r) => v + Sum(l) + Sum(r), null => 0 }
C. node switch { null => 0, TreeNode(var v, var l) => v + Sum(l) }
D. node switch { null => 0, TreeNode(var v, var l, var r) => v + Sum(l) + Sum(r) }
Solution
Step 1: Understand the tree structure and sum logic
The tree node has three parts: Value, Left, and Right. The sum should add the current value plus sums of left and right subtrees.
Step 2: Check each option for correct pattern and order
node switch { null => 0, TreeNode(var v, var l, var r) => v + Sum(l) + Sum(r) } correctly matches null first (base case) and then TreeNode with three variables (value, left, right). It sums value + Sum(left) + Sum(right). node switch { TreeNode(v, l, r) => v + Sum(l) + Sum(r), null => 0 } misses 'var' keywords, which is required. node switch { null => 0, TreeNode(v, l, r) => v + Sum(l) + Sum(r) } misses 'var' keywords, which is required. node switch { null => 0, TreeNode(var v, var l) => v + Sum(l) } misses the right subtree.
Final Answer:
node switch { null => 0, TreeNode(var v, var l, var r) => v + Sum(l) + Sum(r) } -> Option D
Quick Check:
Correct pattern with all parts and base case first [OK]
Hint: Include all node parts and base case null first [OK]
Common Mistakes:
Omitting 'var' in pattern variables
Missing one subtree in sum
Placing null case after non-null without care
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.