Property patterns in C Sharp (C#) - Time & Space Complexity
When using property patterns in C#, we want to know how the time to check these patterns changes as the input grows.
We ask: How does the number of property checks grow when we match more objects or more properties?
Analyze the time complexity of the following code snippet.
public bool IsPersonAdult(Person p) {
return p is { Age: >= 18, Name: { Length: > 0 } };
}
// Person class has properties Age (int) and Name (string)
This code checks if a Person object has Age 18 or older and a non-empty Name using property patterns.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Checking each property in the pattern (Age and Name.Length).
- How many times: Once per call for each property; no loops inside this snippet.
Each time we check a Person object, the number of property checks stays the same because the pattern has a fixed number of properties.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 20 (2 checks x 10 objects) |
| 100 | 200 (2 checks x 100 objects) |
| 1000 | 2000 (2 checks x 1000 objects) |
Pattern observation: The total work grows directly with the number of objects checked, but each object requires a fixed small number of property checks.
Time Complexity: O(n)
This means the time grows linearly with the number of objects we check, since each object requires a fixed number of property checks.
[X] Wrong: "Checking property patterns is slow because it looks inside many properties and must do a lot of work."
[OK] Correct: The number of properties checked is fixed by the pattern, so each check takes about the same small time, no matter how many objects you test.
Understanding how property patterns scale helps you explain how your code behaves with more data, showing you think about efficiency and real-world use.
"What if the pattern included a nested collection property that you loop through? How would the time complexity change?"
Practice
property patterns in C#?Solution
Step 1: Understand what property patterns do
Property patterns allow checking the values of properties inside an object directly in conditions.Step 2: Identify the main use
This helps write clearer and simpler code when you want to check multiple properties without nested ifs.Final Answer:
To check multiple properties of an object in a clear and concise way -> Option CQuick Check:
Property patterns simplify property checks = B [OK]
- Confusing property patterns with property declaration
- Thinking property patterns create objects
- Assuming property patterns override methods
switch expression for an object person with a property Age?Solution
Step 1: Recall property pattern syntax
Property patterns use curly braces with property name and condition inside, like{ Age: > 18 }.Step 2: Match with options
case { Age: > 18 }: matches this syntax exactly, others use invalid or incorrect forms.Final Answer:
case { Age: > 18 }: -> Option BQuick Check:
Property pattern syntax uses braces = A [OK]
- Using parentheses instead of braces
- Writing property condition without braces
- Referencing object name inside case
record Person(string Name, int Age);
Person p = new("Alice", 25);
string result = p switch
{
{ Age: < 18 } => "Minor",
{ Age: >= 18 and < 65 } => "Adult",
_ => "Senior"
};
Console.WriteLine(result);Solution
Step 1: Check the Age property of the Person object
The person has Age = 25.Step 2: Match Age with switch cases
25 is not less than 18, so first case fails. 25 is >= 18 and < 65, so second case matches and returns "Adult".Final Answer:
Adult -> Option AQuick Check:
Age 25 fits adult range = A [OK]
- Confusing range conditions
- Assuming default case runs first
- Ignoring property pattern syntax
record Product(string Name, decimal Price);
Product p = new("Book", 15.99m);
if (p is { Price > 10 })
{
Console.WriteLine("Expensive");
}Solution
Step 1: Check property pattern syntax
Property patterns require a colon between property name and condition, like{ Price: > 10 }.Step 2: Identify the error in the code
The code uses{ Price > 10 }which is invalid syntax.Final Answer:
The property pattern syntax is incorrect; it should be { Price: > 10 } -> Option DQuick Check:
Property patterns need colon between property and condition = D [OK]
- Omitting colon in property pattern
- Misunderstanding decimal literal suffix
- Adding unnecessary parentheses
Person objects, how can you use property patterns in a switch expression to classify each person as "Child" if Age < 13, "Teen" if Age between 13 and 19, "Adult" if Age between 20 and 64, and "Senior" otherwise? Which code snippet correctly implements this?Solution
Step 1: Understand correct property pattern syntax with ranges
Property patterns use colon and conditions like{ Age: < 13 }and combine withandfor ranges.Step 2: Check each option for correct syntax and ranges
persons.Select(p => p switch { { Age: < 13 } => "Child", { Age: >= 13 and <= 19 } => "Teen", { Age: >= 20 and <= 64 } => "Adult", _ => "Senior" }) uses correct syntax and inclusive ranges matching the problem. persons.Select(p => p switch { Age < 13 => "Child", Age >= 13 and Age <= 19 => "Teen", Age >= 20 and Age <= 64 => "Adult", _ => "Senior" }) lacks braces and colons. persons.Select(p => p switch { { Age < 13 } => "Child", { Age >= 13 and Age <= 19 } => "Teen", { Age >= 20 and Age <= 64 } => "Adult", _ => "Senior" }) misplaces comparison operators inside braces. persons.Select(p => p switch { { Age: < 13 } => "Child", { Age: > 13 and < 20 } => "Teen", { Age: >= 20 and < 65 } => "Adult", _ => "Senior" }) uses exclusive Teen range (should include 13 and 19).Final Answer:
persons.Select(p => p switch { { Age: < 13 } => "Child", { Age: >= 13 and <= 19 } => "Teen", { Age: >= 20 and <= 64 } => "Adult", _ => "Senior" }) -> Option AQuick Check:
Correct property pattern syntax with proper ranges = C [OK]
- Omitting braces or colon in property patterns
- Using incorrect range operators or missing boundaries
- Mixing syntax from other languages
Ready to prove it?
Pass the test and this pattern moves unknown
