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

Positional patterns in C Sharp (C#) - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a positional pattern in C#?
A positional pattern lets you match an object by its position in a Deconstruct method or a record, checking its parts directly in a concise way.
Click to reveal answer
beginner
How do you use positional patterns with records in C#?
You write the record name followed by parentheses with variables to match each part, like: RecordName(var1, var2).
Click to reveal answer
intermediate
What method must a class have to support positional patterns?
It must have a Deconstruct method that outputs the parts you want to match.
Click to reveal answer
beginner
Example: How to match a Point record with positional pattern to get X and Y?
Use case Point(var x, var y): inside a switch or if to get X and Y values from the Point.
Click to reveal answer
intermediate
What happens if the number of variables in a positional pattern does not match the Deconstruct method?
The code will not compile because the pattern expects the exact number of parts to match.
Click to reveal answer
Which method enables positional patterns in a class?
AToString
BDeconstruct
CEquals
DGetHashCode
How do you write a positional pattern for a record named Point with two parts?
APoint->(x, y)
BPoint[x, y]
CPoint{x, y}
DPoint(var x, var y)
What will happen if you use fewer variables than the Deconstruct method parts in a positional pattern?
AIt throws runtime exception
BIt matches only the first parts
CCompilation error
DIt ignores extra parts
Positional patterns are mainly used inside which C# construct?
Aswitch expressions
Bfor loops
Ctry-catch blocks
Dclass declarations
Which C# feature introduced positional patterns?
AC# 9.0
BC# 7.0
CC# 8.0
DC# 10.0
Explain how positional patterns work with records and Deconstruct methods in C#.
Think about how you break down an object into pieces to check them.
You got /4 concepts.
    Describe what happens if the number of variables in a positional pattern does not match the Deconstruct method.
    Consider how strict the compiler is about matching parts.
    You got /3 concepts.

      Practice

      (1/5)
      1.

      What is the main purpose of positional patterns in C#?

      record Point(int X, int Y);
      Using case Point(var x, var y): inside a switch statement helps to:

      easy
      A. Extract values of X and Y from a Point object easily
      B. Create a new Point object with given X and Y
      C. Change the values of X and Y in the Point object
      D. Call a method named Deconstruct on the Point object

      Solution

      1. Step 1: Understand positional pattern usage

        Positional patterns allow matching an object and extracting its parts in one step, like case Point(var x, var y):.
      2. Step 2: Identify what the pattern does with Point

        It extracts the X and Y values from the Point object into variables x and y for use inside the case block.
      3. Final Answer:

        Extract values of X and Y from a Point object easily -> Option A
      4. Quick Check:

        Positional pattern extracts values [OK]
      Hint: Positional patterns extract parts of an object [OK]
      Common Mistakes:
      • Thinking positional patterns create or modify objects
      • Confusing Deconstruct method call with pattern matching
      • Assuming positional patterns only check types without extracting
      2.

      Which of the following is the correct syntax for using a positional pattern with a record Person(string Name, int Age) inside a switch expression?

      switch(person) {
          case ???:
              // code
              break;
      }
      easy
      A. Person(var name, var age)
      B. Person[name, age]
      C. Person{name, age}
      D. Person(name: name, age: age)

      Solution

      1. Step 1: Recall positional pattern syntax

        Positional patterns use parentheses with variables: Type(var1, var2).
      2. Step 2: Match syntax to options

        Person(var name, var age) uses parentheses and variables correctly: Person(var name, var age). Others use invalid syntax for positional patterns.
      3. Final Answer:

        Person(var name, var age) -> Option A
      4. Quick Check:

        Positional pattern syntax uses parentheses [OK]
      Hint: Positional patterns always use parentheses, not brackets or braces [OK]
      Common Mistakes:
      • Using square brackets or curly braces instead of parentheses
      • Trying to use named arguments syntax inside patterns
      • Omitting var keyword or variable names
      3.

      What is the output of the following code?

      record Point(int X, int Y);
      
      var p = new Point(3, 4);
      switch (p)
      {
          case Point(0, 0):
              Console.WriteLine("Origin");
              break;
          case Point(var x, var y) when x == y:
              Console.WriteLine("On diagonal");
              break;
          case Point(var x, var y):
              Console.WriteLine($"Point at ({x}, {y})");
              break;
      }
      medium
      A. Origin
      B. Point at (3, 4)
      C. On diagonal
      D. No output

      Solution

      1. Step 1: Check first case Point(0, 0)

        p is (3,4), so it does not match (0,0).
      2. Step 2: Check second case with condition x == y

        x=3, y=4, so x != y; condition fails.
      3. Step 3: Third case matches any Point and prints coordinates

        It matches and prints "Point at (3, 4)".
      4. Final Answer:

        Point at (3, 4) -> Option B
      5. Quick Check:

        Pattern matches last case with output [OK]
      Hint: Check cases top to bottom; first match runs [OK]
      Common Mistakes:
      • Assuming (3,4) matches (0,0)
      • Ignoring the when condition in second case
      • Thinking no case matches and no output
      4.

      Identify the error in this code snippet using positional patterns:

      record Rectangle(int Width, int Height);
      
      var rect = new Rectangle(5, 10);
      switch(rect)
      {
          case Rectangle(var w, var h):
              Console.WriteLine($"Width: {w}, Height: {h}");
              break;
          case Rectangle(w, h):
              Console.WriteLine("Invalid pattern");
              break;
      }
      medium
      A. Switch expression cannot use records
      B. First case should use named arguments instead of positional pattern
      C. Second case uses variables without var keyword, causing a syntax error
      D. No error, code runs fine

      Solution

      1. Step 1: Review positional pattern variable declaration

        Variables in positional patterns must be declared with var or a type.
      2. Step 2: Identify error in second case

        Second case uses Rectangle(w, h) without var, which is invalid syntax.
      3. Final Answer:

        Second case uses variables without var keyword, causing a syntax error -> Option C
      4. Quick Check:

        Variables need var keyword in patterns [OK]
      Hint: Always declare variables with var in positional patterns [OK]
      Common Mistakes:
      • Omitting var keyword for variables in patterns
      • Thinking records can't be used in switch
      • Confusing named arguments with pattern variables
      5.

      Given the record Person(string Name, int Age), write a switch expression using positional patterns that returns:

      • "Child" if Age < 13
      • "Teen" if Age is between 13 and 19 inclusive
      • "Adult" otherwise

      Which of the following switch expressions correctly implements this?

      hard
      A. person switch { Person(_, var age) when age < 13 => "Child", Person(_, var age) when age > 13 && age <= 19 => "Teen", Person(_, _) => "Adult" };
      B. person switch { Person(var name, var age) when age < 13 => "Child", Person(var name, var age) when age > 13 && age < 19 => "Teen", _ => "Adult" };
      C. person switch { Person(var name, var age) when age <= 13 => "Child", Person(var name, var age) when age >= 13 && age <= 19 => "Teen", Person(var name, var age) => "Adult" };
      D. person switch { Person(var name, var age) when age < 13 => "Child", Person(var name, var age) when age >= 13 && age <= 19 => "Teen", Person(var name, var age) => "Adult" };

      Solution

      1. Step 1: Check age ranges and conditions

        Child: age < 13, Teen: 13 ≤ age ≤ 19, Adult: otherwise.
      2. Step 2: Analyze each option's conditions

        person switch { Person(var name, var age) when age < 13 => "Child", Person(var name, var age) when age >= 13 && age <= 19 => "Teen", Person(var name, var age) => "Adult" }; correctly uses age < 13 for Child, age >= 13 && age <= 19 for Teen, and default Adult case. person switch { Person(_, var age) when age < 13 => "Child", Person(_, var age) when age > 13 && age <= 19 => "Teen", Person(_, _) => "Adult" }; misses age=13 (falls to Adult) because Teen condition uses > 13. person switch { Person(var name, var age) when age < 13 => "Child", Person(var name, var age) when age > 13 && age < 19 => "Teen", _ => "Adult" }; excludes age == 13 and 19 for Teen. person switch { Person(var name, var age) when age <= 13 => "Child", Person(var name, var age) when age >= 13 && age <= 19 => "Teen", Person(var name, var age) => "Adult" }; overlaps Child and Teen at age 13.
      3. Step 3: Confirm the correct implementation

        person switch { Person(var name, var age) when age < 13 => "Child", Person(var name, var age) when age >= 13 && age <= 19 => "Teen", Person(var name, var age) => "Adult" }; matches all conditions correctly and clearly.
      4. Final Answer:

        Option D code correctly implements the age groups -> Option D
      5. Quick Check:

        Check age ranges carefully in when clauses [OK]
      Hint: Check boundary conditions carefully in when clauses [OK]
      Common Mistakes:
      • Overlapping or missing age boundaries
      • Using _ wildcard instead of variables when needed
      • Incorrect logical operators in conditions
      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