Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is property validation logic in C#?
Property validation logic is code inside a property setter that checks if the new value meets certain rules before assigning it. It helps keep data correct and safe.
Click to reveal answer
beginner
Why use validation logic inside property setters?
To prevent invalid or unexpected values from being stored in an object, ensuring the object stays in a valid state.
Click to reveal answer
intermediate
How do you throw an exception in a property setter if validation fails?
Use the throw keyword with an exception type, for example: throw new ArgumentException("Invalid value");
Click to reveal answer
beginner
Show a simple example of property validation logic for an Age property that must be between 0 and 120.
private int age; public int Age { get => age; set { if (value < 0 || value > 120) throw new ArgumentOutOfRangeException(nameof(value), "Age must be between 0 and 120."); age = value; } }
Click to reveal answer
beginner
What happens if you assign an invalid value to a property with validation logic?
The setter throws an exception, stopping the assignment and alerting the programmer or user that the value is invalid.
Click to reveal answer
What keyword is used to stop a property setter when a value is invalid?
Athrow
Breturn
Cbreak
Dcontinue
✗ Incorrect
The 'throw' keyword raises an exception to stop the setter when validation fails.
Where do you put validation logic in a property?
AOutside the property
BIn the getter
CIn the setter
DIn the constructor only
✗ Incorrect
Validation logic belongs in the setter to check new values before assigning.
Which exception is commonly used for invalid argument values in property setters?
ANullReferenceException
BIndexOutOfRangeException
CInvalidOperationException
DArgumentException
✗ Incorrect
ArgumentException is used when a method or property receives an invalid argument.
What is the purpose of property validation logic?
ATo improve performance
BTo prevent invalid data
CTo hide data
DTo format output
✗ Incorrect
Validation logic prevents invalid or unexpected data from being stored.
If a property setter throws an exception, what happens to the property value?
AIt remains unchanged
BIt changes to the new value
CIt becomes null
DIt resets to default
✗ Incorrect
The property value stays the same because the assignment is stopped by the exception.
Explain how to add validation logic to a property setter in C# and why it is useful.
Think about checking the value before saving it.
You got /4 concepts.
Describe what happens when an invalid value is assigned to a property with validation logic.
Consider how the program reacts to bad input.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of adding validation logic inside a property setter in C#?
easy
A. To check and control the value before saving it to the field
B. To make the property read-only
C. To speed up the program execution
D. To automatically generate a default value
Solution
Step 1: Understand property setters
Property setters allow you to assign values to private fields through a controlled interface.
Step 2: Role of validation logic
Validation logic inside the setter checks if the value is valid before saving it, preventing invalid data.
Final Answer:
To check and control the value before saving it to the field -> Option A
Quick Check:
Validation in setter = control value before save [OK]
Hint: Validation logic in setter controls data before saving [OK]
Common Mistakes:
Thinking validation makes property read-only
Assuming validation speeds up code
Confusing validation with default value assignment
2. Which of the following is the correct syntax to throw an exception inside a property setter when the value is invalid?
easy
A. set { if (value < 0) throw new Exception("Invalid value"); field = value; }
B. set { if (value < 0) return; field = value; }
C. set { if (value < 0) Console.WriteLine("Invalid"); field = value; }
Throwing an exception uses the keyword 'throw' followed by 'new Exception(message)'.
Step 2: Check each option
set { if (value < 0) throw new Exception("Invalid value"); field = value; } correctly throws an exception if value is less than zero. Others use invalid statements like return, Console.WriteLine, or break inside setter.
Final Answer:
set { if (value < 0) throw new Exception("Invalid value"); field = value; } -> Option A
Quick Check:
Throw exception = throw new Exception(...) [OK]
Hint: Use 'throw new Exception' to stop invalid values [OK]
Common Mistakes:
Using 'return' instead of 'throw' in setter
Trying to use 'break' inside setter
Only printing error without stopping assignment
3. Consider this C# class snippet:
class Person {
private int age;
public int Age {
get => age;
set {
if (value < 0) throw new ArgumentException("Age cannot be negative");
age = value;
}
}
}
What happens if you run this code?
var p = new Person();
p.Age = -5;
medium
A. The age is set to -5 without error
B. An ArgumentException is thrown with message 'Age cannot be negative'
C. The program crashes with a NullReferenceException
D. The setter ignores the negative value and leaves age unchanged
Solution
Step 1: Analyze setter validation
The setter checks if value is less than 0 and throws ArgumentException if true.
Step 2: Apply to given code
Setting Age to -5 triggers the exception because -5 < 0.
Final Answer:
An ArgumentException is thrown with message 'Age cannot be negative' -> Option B
Quick Check:
Negative age triggers ArgumentException [OK]
Hint: Setter throws exception on invalid input [OK]
Common Mistakes:
Assuming negative value is accepted
Confusing exception type thrown
Thinking setter silently ignores invalid values
4. Identify the error in this property setter code:
private string name;
public string Name {
get { return name; }
set {
if (value == null || value == "")
throw new ArgumentException("Name cannot be empty");
name = value;
}
}
medium
A. The setter does not assign the value to the field
B. The setter should use 'value.Equals("")' instead of 'value == ""'
C. The setter does not check for whitespace-only strings
D. The setter should not throw exceptions in property setters
Solution
Step 1: Review validation logic
The setter checks if value is null or empty string but does not check if value is whitespace only.
Step 2: Understand missing validation
Strings like " " (spaces) pass the check but are usually invalid for a name.
Final Answer:
The setter does not check for whitespace-only strings -> Option C
Quick Check:
Missing whitespace check in setter validation [OK]
Hint: Check for whitespace with string.IsNullOrWhiteSpace [OK]
Common Mistakes:
Thinking '==' is wrong for string comparison here
Believing exceptions should never be thrown in setters
Forgetting to assign value to field
5. You want to create a property Score that only accepts values between 0 and 100 inclusive. If the value is outside this range, it should throw an ArgumentOutOfRangeException. Which of these implementations correctly applies this validation?
hard
A. private int score; public int Score { get => score; set { if (value < 0 && value > 100) throw new ArgumentOutOfRangeException("Score must be 0-100"); score = value; } }
B. private int score; public int Score { get => score; set { if (value <= 0 && value >= 100) throw new ArgumentOutOfRangeException("Score must be 0-100"); score = value; } }
C. private int score; public int Score { get => score; set { if (value > 0 || value < 100) throw new ArgumentOutOfRangeException("Score must be 0-100"); score = value; } }
D. private int score; public int Score { get => score; set { if (value < 0 || value > 100) throw new ArgumentOutOfRangeException("Score must be 0-100"); score = value; } }
Solution
Step 1: Understand the range condition
The value must be between 0 and 100 inclusive, so invalid values are less than 0 or greater than 100.
Step 2: Analyze each condition
private int score; public int Score { get => score; set { if (value < 0 || value > 100) throw new ArgumentOutOfRangeException("Score must be 0-100"); score = value; } } uses 'value < 0 || value > 100' which correctly checks invalid values. Options A, B, and D use incorrect logical operators or conditions.
Final Answer:
private int score; public int Score { get => score; set { if (value < 0 || value > 100) throw new ArgumentOutOfRangeException("Score must be 0-100"); score = value; } } -> Option D
Quick Check:
Use '||' for out-of-range checks [OK]
Hint: Use 'if (value < min || value > max)' for range validation [OK]