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

Positional patterns in C Sharp (C#) - Mini Project: Build & Apply

Choose your learning style10 modes available
Using Positional Patterns in C#
📖 Scenario: You work at a delivery company that handles different types of packages. Each package has a type and a weight. You want to write a program that checks the package type and weight to decide how to handle it.
🎯 Goal: Build a C# program that uses positional patterns to check package details and print the handling instructions.
📋 What You'll Learn
Create a record type Package with two properties: Type (string) and Weight (int).
Create a variable package with specific values.
Create a variable maxWeight to set the weight limit.
Use a switch expression with positional patterns to decide the handling message.
Print the handling message.
💡 Why This Matters
🌍 Real World
Delivery companies often need to decide how to handle packages based on their type and weight. Using positional patterns helps write clear and concise code for these decisions.
💼 Career
Understanding positional patterns and switch expressions is useful for writing clean, readable C# code in many business applications, especially those involving data classification and decision making.
Progress0 / 4 steps
1
Create the Package record and a package instance
Create a record called Package with two properties: string Type and int Weight. Then create a variable called package and set it to new Package("Fragile", 15).
C Sharp (C#)
Hint

Use the record keyword to create a simple data container with two properties.

2
Add a maxWeight variable
Add an integer variable called maxWeight and set it to 20.
C Sharp (C#)
Hint

This variable will be used to compare the package weight later.

3
Use a switch expression with positional patterns
Create a string variable called handling and set it using a switch expression on package. Use positional patterns to match Type and Weight as follows: if Type is "Fragile" and Weight is less than or equal to maxWeight, set handling to "Handle with care"; if Type is "Heavy" and Weight is greater than maxWeight, set handling to "Use forklift"; otherwise, set handling to "Standard handling".
C Sharp (C#)
Hint

Use the switch expression with positional patterns and when clauses for conditions.

4
Print the handling message
Write a Console.WriteLine statement to print the handling variable.
C Sharp (C#)
Hint

Use Console.WriteLine(handling); to show the result.

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