Boxing and unboxing let you convert between simple values and objects so you can use them in different ways.
Boxing and unboxing execution in C Sharp (C#)
int number = 123; // value type object obj = number; // boxing int original = (int)obj; // unboxing
Boxing wraps a value type inside an object.
Unboxing extracts the value type back from the object and requires a cast.
int x = 10; object o = x; // boxing int y = (int)o; // unboxing
double d = 3.14; object obj = d; // boxing double val = (double)obj; // unboxing
bool flag = true; object boxedFlag = flag; // boxing bool unboxedFlag = (bool)boxedFlag; // unboxing
This program shows boxing by storing an int inside an object, then unboxing it back to int.
using System; class Program { static void Main() { int number = 42; // value type object boxedNumber = number; // boxing Console.WriteLine("Boxed value: " + boxedNumber); int unboxedNumber = (int)boxedNumber; // unboxing Console.WriteLine($"Unboxed value: {unboxedNumber}"); } }
Boxing creates a new object on the heap, so it uses more memory and time than using value types directly.
Unboxing requires an explicit cast and will throw an error if the object does not contain the correct value type.
Try to minimize boxing/unboxing in performance-critical code.
Boxing converts a value type to an object.
Unboxing converts the object back to the original value type.
Boxing and unboxing let you use value types where objects are needed.
Practice
Solution
Step 1: Understand boxing concept
Boxing means wrapping a value type (like int) inside an object so it can be treated as an object.Step 2: Identify the conversion direction
Boxing converts a value type to an object type, not the other way around.Final Answer:
A value type is converted to an object type. -> Option AQuick Check:
Boxing = value type to object [OK]
- Confusing boxing with unboxing
- Thinking boxing converts to string
- Mixing up value and reference types
Solution
Step 1: Recall unboxing syntax
Unboxing requires an explicit cast from object to the original value type.Step 2: Check each option
int x = (int)obj; uses explicit cast (int)obj which is correct. int x = obj as int; uses 'as' which works only for reference types. int x = Convert.ToInt32(obj); converts but is not unboxing. int x = obj.ToInt(); is invalid syntax.Final Answer:
int x = (int)obj; -> Option DQuick Check:
Unboxing = explicit cast (int)obj [OK]
- Using 'as' keyword for unboxing
- Using Convert.ToInt32 instead of cast
- Calling non-existent methods like ToInt()
int a = 10;
object obj = a; // boxing
int b = (int)obj; // unboxing
b += 5;
Console.WriteLine(a);
Solution
Step 1: Understand boxing and unboxing here
Variable 'a' is boxed into 'obj'. Then 'obj' is unboxed into 'b'. 'b' is a separate copy.Step 2: Check value changes
Incrementing 'b' by 5 does not affect 'a'. So 'a' remains 10.Final Answer:
10 -> Option BQuick Check:
Boxing copies value; original stays 10 [OK]
- Assuming 'a' changes when 'b' changes
- Confusing reference and value types
- Thinking boxing links variables
object obj = 123;
long l = (long)obj;
Console.WriteLine(l);
Solution
Step 1: Analyze boxing and unboxing types
Boxing stores an int (123) in obj. Unboxing must cast back to int, not long.Step 2: Understand runtime behavior
Trying to unbox as long causes InvalidCastException because obj holds int, not long.Final Answer:
Invalid cast exception at runtime -> Option AQuick Check:
Unboxing type mismatch causes runtime error [OK]
- Casting to different value type than boxed
- Expecting compile-time error instead of runtime
- Ignoring boxing type stored
List<object> list = new List<object> { 1, 2, 3, 4 };Which code snippet correctly sums the integers?
Solution
Step 1: Understand list content and types
List contains objects boxed from ints. To sum, unbox each object to int.Step 2: Evaluate each option
A: int sum = 0; foreach (int x in list) sum += x; compile error - cannot implicitly convert object to int.
B: int sum = 0; foreach (object o in list) sum += (o as int); compile error - 'as' cannot be used with non-nullable value types.
C: int sum = list.Sum(); fails because list is List<object>, no Sum() overload.
D: int sum = 0; foreach (object o in list) sum += (int)o; unboxes correctly with (int)o.Final Answer:
int sum = 0; foreach (object o in list) sum += (int)o; -> Option CQuick Check:
Unbox each object with (int)o to sum [OK]
- Trying to foreach as int directly
- Using Sum() on List<object>
- Using 'as' operator for unboxing
Ready to prove it?
Pass the test and this pattern moves unknown
