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

Type checking patterns in C Sharp (C#) - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

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
Concept Flow - Type checking patterns
Start with object 'obj'
Check type with 'is' pattern
Cast and use
End
The program checks if an object matches a type pattern using 'is'. If yes, it casts and uses it; if no, it skips or handles differently.
Execution Sample
C Sharp (C#)
object obj = "hello";
if (obj is string s)
{
    Console.WriteLine(s.Length);
}
Checks if obj is a string, then prints its length.
Execution Table
StepExpressionEvaluationResultAction
1obj = "hello"Assign string to objobj = "hello"Store string in obj
2obj is string sCheck if obj is stringTrueCast obj to s
3s.LengthGet length of s5Print 5
4EndNo more code-Program ends
💡 After printing length, program ends.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
objnull"hello""hello""hello""hello"
sundefinedundefined"hello""hello""hello"
Key Moments - 2 Insights
Why can we use 's' inside the if block without explicit casting?
Because the 'is' pattern both checks type and casts obj to s if true, as shown in step 2 of the execution_table.
What happens if obj is not a string?
The condition in step 2 would be false, so the code inside the if block would not run, skipping the cast and print.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 2, what is the result of 'obj is string s'?
AFalse
BTrue
CThrows error
DUndefined
💡 Hint
Check the 'Result' column in step 2 of execution_table.
At which step is the variable 's' assigned a value?
AStep 2
BStep 1
CStep 3
DStep 4
💡 Hint
Look at variable_tracker and execution_table step 2 where casting happens.
If obj was an int instead of a string, what would happen at step 2?
AResult would be True and s assigned
BProgram would crash
CResult would be False and s undefined
Ds would be null
💡 Hint
Refer to key_moments about what happens if obj is not a string.
Concept Snapshot
Type checking patterns use 'is' to check and cast in one step.
Syntax: if (obj is Type varName) { use varName }
If true, varName is assigned and usable inside block.
If false, block is skipped.
This avoids separate casting and null checks.
Full Transcript
This example shows how C# uses type checking patterns with the 'is' keyword. We start with an object 'obj' assigned a string "hello". Then we check if 'obj' is a string and simultaneously cast it to variable 's'. Since obj is a string, the condition is true, and 's' holds the string value. We then print the length of 's', which is 5. If obj was not a string, the if block would be skipped. This pattern helps safely check and use types without extra casting code.

Practice

(1/5)
1. What does the C# pattern if (obj is string s) do?
easy
A. Checks if obj is null
B. Converts obj to string without checking
C. Checks if obj is a string and assigns it to s if true
D. Throws an exception if obj is not a string

Solution

  1. Step 1: Understand the is pattern

    The is keyword checks if an object is of a certain type.
  2. Step 2: Assign variable if type matches

    If obj is a string, it assigns the value to s for use inside the block.
  3. Final Answer:

    Checks if obj is a string and assigns it to s if true -> Option C
  4. Quick Check:

    is Type var checks type and assigns [OK]
Hint: Remember: is Type var checks and assigns together [OK]
Common Mistakes:
  • Thinking it converts without checking
  • Assuming it checks for null only
  • Believing it throws exceptions automatically
2. Which of the following is the correct syntax to check if obj is an int and assign it to number?
easy
A. if (obj is int number) { }
B. if (obj as int number) { }
C. if (obj == int number) { }
D. if (obj instanceof int number) { }

Solution

  1. Step 1: Identify correct C# type pattern syntax

    The correct syntax uses is Type variable to check and assign.
  2. Step 2: Compare options

    if (obj is int number) { } uses is int number, which is valid. Others use invalid keywords or syntax.
  3. Final Answer:

    if (obj is int number) { } -> Option A
  4. Quick Check:

    is Type var syntax is correct [OK]
Hint: Use is Type var for type check and assignment [OK]
Common Mistakes:
  • Using 'as' instead of 'is' for type checking
  • Using '==' to compare types
  • Using JavaScript or Java keywords like 'instanceof'
3. What is the output of this code?
object obj = 42;
if (obj is int n)
{
    Console.WriteLine(n + 10);
}
else
{
    Console.WriteLine("Not an int");
}
medium
A. Not an int
B. 52
C. 42
D. Compilation error

Solution

  1. Step 1: Check the type of obj

    obj holds the integer 42, so obj is int n is true and assigns 42 to n.
  2. Step 2: Calculate the output inside the if block

    It prints n + 10 which is 42 + 10 = 52.
  3. Final Answer:

    52 -> Option B
  4. Quick Check:

    Type check passes, output is 42 + 10 = 52 [OK]
Hint: If type matches, variable holds value for use [OK]
Common Mistakes:
  • Printing the original obj instead of n + 10
  • Choosing else output wrongly
  • Thinking it causes a compile error
4. Identify the error in this code snippet:
object obj = "hello";
if (obj is int number)
{
    Console.WriteLine(number);
}
medium
A. No error, code runs and prints number
B. Runtime exception thrown
C. Syntax error in the if statement
D. The variable 'number' is not assigned because obj is not int

Solution

  1. Step 1: Analyze the type check

    obj is a string, so obj is int number is false and number is not assigned.
  2. Step 2: Understand the effect on code execution

    The if block is skipped, so nothing prints. No error or exception occurs.
  3. Final Answer:

    The variable 'number' is not assigned because obj is not int -> Option D
  4. Quick Check:

    Type check false means variable not assigned [OK]
Hint: If type check fails, variable is not assigned [OK]
Common Mistakes:
  • Thinking it causes syntax error
  • Expecting runtime exception
  • Assuming variable is assigned anyway
5. Given a list of objects List<object> items = new() { 1, "two", 3, null, 4.5 };, which code snippet correctly sums only the integer values using type checking patterns?
hard
A. int sum = 0; foreach (var item in items) { if (item is int n) sum += n; } Console.WriteLine(sum);
B. int sum = 0; foreach (int n in items) { sum += n; } Console.WriteLine(sum);
C. int sum = 0; foreach (var item in items) { if (item is double d) sum += (int)d; } Console.WriteLine(sum);
D. int sum = 0; foreach (var item in items) { sum += (int)item; } Console.WriteLine(sum);

Solution

  1. Step 1: Understand the list contents

    The list has integers, a string, null, and a double. We want to sum only integers.
  2. Step 2: Check each option for correct type filtering

    int sum = 0; foreach (var item in items) { if (item is int n) sum += n; } Console.WriteLine(sum); uses if (item is int n) to add only integers. int sum = 0; foreach (int n in items) { sum += n; } Console.WriteLine(sum); tries to cast all items to int in foreach, causing error. int sum = 0; foreach (var item in items) { if (item is double d) sum += (int)d; } Console.WriteLine(sum); sums doubles cast to int, which is incorrect. int sum = 0; foreach (var item in items) { sum += (int)item; } Console.WriteLine(sum); casts all items to int without checking, causing runtime errors.
  3. Final Answer:

    int sum = 0; foreach (var item in items) { if (item is int n) sum += n; } Console.WriteLine(sum); -> Option A
  4. Quick Check:

    Use is int var to filter integers safely [OK]
Hint: Use if (item is int n) to sum integers safely [OK]
Common Mistakes:
  • Casting without checking causing exceptions
  • Summing wrong types like double or string
  • Assuming foreach int works on object list