Bird
Raised Fist0
C Sharp (C#)programming~5 mins

Recursive pattern matching in C Sharp (C#) - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is recursive pattern matching in C#?
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:
obj is Node { Left: null, Right: Node { Value: 5 } }
to check inside nested objects.
Click to reveal answer
beginner
What C# version introduced recursive pattern matching?
Recursive pattern matching was introduced in C# 8.0, allowing more expressive and readable code when working with nested data.
Click to reveal answer
beginner
Why is recursive pattern matching useful in real-world programming?
It helps to easily check and extract data from complex nested objects like trees or JSON-like structures without writing many if-else statements.
Click to reveal answer
Which C# feature allows checking nested object properties in a single pattern?
ARecursive pattern matching
BSimple if statements
CLoops
DSwitch expressions without patterns
In C#, what keyword is used to test if an object matches a pattern?
Amatch
Bis
Ccase
Dcheck
Which C# version first supported recursive pattern matching?
AC# 9.0
BC# 7.0
CC# 8.0
DC# 6.0
What does this pattern check?
obj is Point { X: 0, Y: 0 }
AIf obj is null
BIf obj is a string
CIf obj has any X and Y values
DIf obj is a Point with X and Y equal to 0
Why use recursive pattern matching instead of nested if statements?
AIt makes code shorter and clearer
BIt runs slower
CIt is harder to read
DIt requires more code
Describe how recursive pattern matching works in C# and give a simple example.
Think about matching an object inside another object.
You got /4 concepts.
    Explain why recursive pattern matching is helpful when working with complex data structures.
    Consider how you would check a tree or JSON data.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of recursive pattern matching in C#?
      easy
      A. To break down complex data structures step-by-step
      B. To create loops that run forever
      C. To declare variables without types
      D. To handle exceptions automatically

      Solution

      1. Step 1: Understand recursive pattern matching concept

        Recursive pattern matching is used to analyze data by breaking it down into smaller parts recursively.
      2. 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.
      3. Final Answer:

        To break down complex data structures step-by-step -> Option A
      4. 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

      1. Step 1: Recall C# recursive pattern syntax

        In C#, recursive patterns use parentheses with variables inside, like Node(var value, var next).
      2. 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.
      3. Final Answer:

        case Node(var value, var next): -> Option A
      4. Quick Check:

        Recursive pattern syntax uses parentheses ( ) [OK]
      Hint: Look for parentheses with variables inside in case patterns [OK]
      Common Mistakes:
      • Using square brackets instead of parentheses
      • Using arrows or semicolons incorrectly
      • Missing 'var' keyword before variables
      3. What will be the output of this C# code snippet?
      record Node(int Value, Node? Next);
      Node list = new(1, new(2, new(3, null)));

      string PrintList(Node? node) => node switch
      {
      null => "End",
      Node(var v, var n) => $"{v} -> " + PrintList(n)
      };

      Console.WriteLine(PrintList(list));
      medium
      A. 1 2 3 End
      B. End
      C. 1 -> 2 -> 3 -> End
      D. 1 -> 2 -> 3

      Solution

      1. Step 1: Understand the recursive function PrintList

        PrintList prints the current node's value, then calls itself on the next node, until it reaches null and returns "End".
      2. Step 2: Trace the output for list nodes 1, 2, 3

        It prints "1 -> " + PrintList(2), then "2 -> " + PrintList(3), then "3 -> " + PrintList(null), which returns "End".
      3. Final Answer:

        1 -> 2 -> 3 -> End -> Option C
      4. Quick Check:

        Recursive print with null base case = 1 -> 2 -> 3 -> End [OK]
      Hint: Follow recursion calls and base case carefully [OK]
      Common Mistakes:
      • Ignoring the base case output
      • Missing arrows in output
      • Confusing spaces with arrows
      4. Identify the error in this recursive pattern matching code:
      record Node(int Value, Node? Next);
      string PrintList(Node? node) => node switch
      {
      Node(var v, var n) => $"{v} -> " + PrintList(n),
      null => "End"
      };
      medium
      A. Missing semicolon after switch expression
      B. No error, code works correctly
      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

      1. 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.
      2. Step 2: Verify syntax correctness

        The pattern syntax and semicolons are correct. No syntax errors exist.
      3. Final Answer:

        No error, code works correctly -> Option B
      4. 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

      1. 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.
      2. 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.
      3. Final Answer:

        node switch { null => 0, TreeNode(var v, var l, var r) => v + Sum(l) + Sum(r) } -> Option D
      4. 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 unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard