Top 25 Tricky C# Interview Questions (With Explanations and Code Examples)
Renuka Patil

Renuka Patil @renukapatil

About: Interested in cloud computing, DevOps and microservices.

Location:
Pune, India
Joined:
Mar 7, 2022

Top 25 Tricky C# Interview Questions (With Explanations and Code Examples)

Publish Date: May 13
0 0

Preparing for a C# interview can be challenging, especially when the questions go beyond syntax and test your real-world problem-solving and conceptual understanding. Whether you're a beginner brushing up your skills or an experienced developer aiming for senior roles, mastering tricky C# questions is essential. In this blog, I’ve compiled 25 carefully selected C# interview questions that often trip up candidates—not just with clever wording, but with depth. Each question includes a clear explanation and a code example to help you not only understand the concept but also remember it in the long run.


1. Boxing/Unboxing Confusion

object obj = 123;
long l = (long)(int)obj; // Why the extra cast?
Enter fullscreen mode Exit fullscreen mode

Answer: Unboxing must match the exact type. You must unbox to int before casting to long.


2. Object Equality vs Reference Equality

object a = 123;
object b = 123;
Console.WriteLine(a == b); // Output?
Enter fullscreen mode Exit fullscreen mode

Answer: False — reference equality for boxed values fails.


3. String Interning

string a = "hello";
string b = "he" + "llo";
Console.WriteLine(object.ReferenceEquals(a, b)); // Output?
Enter fullscreen mode Exit fullscreen mode

Answer: True — compiler optimizes literals and interns strings.


4. Implicit vs Explicit Casting

double d = 10.9;
int i = (int)d;
Console.WriteLine(i); // Output?
Enter fullscreen mode Exit fullscreen mode

Answer: 10 — explicit cast truncates (not rounds).


5. Nullable with Null-Coalescing

int? x = null;
int y = x ?? 99;
Console.WriteLine(y); // Output?
Enter fullscreen mode Exit fullscreen mode

Answer: 99?? provides fallback when null.


6. Struct vs Class Copy Behavior

struct S { public int X; }
S a = new S { X = 1 };
S b = a;
b.X = 2;
Console.WriteLine(a.X); // Output?
Enter fullscreen mode Exit fullscreen mode

Answer: 1 — value type gets copied.


7. Foreach Variable Capture

var actions = new List<Action>();
for (int i = 0; i < 3; i++)
{
    actions.Add(() => Console.Write(i));
}
foreach (var act in actions) act(); // Output?
Enter fullscreen mode Exit fullscreen mode

Answer: 333 — all actions reference the same i.

Fix: Use a local copy of i inside the loop.


8. Overriding vs Hiding

class Base { public virtual void Show() => Console.Write("Base"); }
class Derived : Base { public new void Show() => Console.Write("Derived"); }
Base b = new Derived(); b.Show(); // Output?
Enter fullscreen mode Exit fullscreen mode

Answer: Base — method hiding, not overriding.


9. Params Keyword Quirk

void Print(params int[] numbers) => Console.WriteLine(numbers.Length);
Print();          // Output?
Print(null);      // Output?
Enter fullscreen mode Exit fullscreen mode

Answer:

  • 0 — empty params
  • System.NullReferenceExceptionnull is passed directly.

10. Null with == Operator

string a = null;
Console.WriteLine(a == null); // Output?
Enter fullscreen mode Exit fullscreen mode

Answer: True — safe because == is overloaded for strings.


11. Readonly with Reference Type

readonly List<int> list = new List<int>();
list.Add(1); // Is this allowed?
Enter fullscreen mode Exit fullscreen mode

Answer: Yes — readonly means reference can't change, not object contents.


12. Static Constructor Execution

class A { static A() { Console.Write("Static"); } }
A a1 = new A(); A a2 = new A(); // How many times will "Static" print?
Enter fullscreen mode Exit fullscreen mode

Answer: Once — static constructor runs only once per type.


13. Catching Exception Types

try { throw new NullReferenceException(); }
catch (Exception) { Console.Write("Caught"); }
Enter fullscreen mode Exit fullscreen mode

Answer: Caught — because NullReferenceException is a subclass of Exception.


14. IEnumerable vs IEnumerator Execution

IEnumerable<int> Foo()
{
    Console.Write("Start");
    yield return 1;
}
var result = Foo(); // Output?
Enter fullscreen mode Exit fullscreen mode

Answer: Nothing — execution deferred until iteration begins.


15. Integer Overflow

int a = int.MaxValue;
int b = a + 1;
Console.WriteLine(b); // Output?
Enter fullscreen mode Exit fullscreen mode

Answer: -2147483648 — overflow with wraparound.


16. LINQ Deferred Execution

var numbers = new List<int> { 1, 2, 3 };
var result = numbers.Select(x => x * 2);
numbers.Add(4);
foreach (var x in result) Console.Write(x); // Output?
Enter fullscreen mode Exit fullscreen mode

Answer: 2468 — because of deferred execution.


17. StringBuilder vs String Concatenation

string s = "";
for (int i = 0; i < 1000; i++) s += i.ToString();
Enter fullscreen mode Exit fullscreen mode

Problem: Performance. String is immutable — use StringBuilder.


18. Static vs Instance Members

class A { public static int Count = 0; }
A.Count++;
Enter fullscreen mode Exit fullscreen mode

Answer: Valid. Static members belong to the class, not instance.


19. Locking on this

lock (this) { } // Is this safe?
Enter fullscreen mode Exit fullscreen mode

Answer: No — it's publicly accessible. Lock on private object instead.


20. Implicit Type with Null

var x = null; // Compile-time error
Enter fullscreen mode Exit fullscreen mode

Answer: var needs an initializer with a specific type.


21. Boxing & Unboxing Tricky Question

object obj = 10;
Console.WriteLine(obj == 10); // What will this print?
Enter fullscreen mode Exit fullscreen mode

Answer:

True.

Even though obj is boxed, the == operator for int is used here, so it unboxes obj and compares the values.

But now try this:

object a = 10;
object b = 10;
Console.WriteLine(a == b); // What will this print?
Enter fullscreen mode Exit fullscreen mode

Answer:

False.

Now you're comparing two boxed objects — a and b are references to two different boxes in memory. Reference comparison fails.


22. Nullable Types & Null Coalescing

int? x = null;
int y = x ?? 5;
Console.WriteLine(y); // Output?
Enter fullscreen mode Exit fullscreen mode

Answer:

5 — Because x is null, the ?? operator provides a default.


23. Implicit & Explicit Conversion Tricky

double d = 10.5;
int i = (int)d;
Console.WriteLine(i); // Output?
Enter fullscreen mode Exit fullscreen mode

Answer:

10 — Because (int) casts truncate, not round.


24. Value vs Reference Types

struct MyStruct
{
    public int Value;
}

class MyClass
{
    public int Value;
}
Enter fullscreen mode Exit fullscreen mode

Now test this behavior:

MyStruct s1 = new MyStruct { Value = 5 };
MyStruct s2 = s1;
s2.Value = 10;
Console.WriteLine(s1.Value); // Output?
Enter fullscreen mode Exit fullscreen mode

Answer:

5 — because structs are value types, s2 is a copy of s1.

Now compare:

MyClass c1 = new MyClass { Value = 5 };
MyClass c2 = c1;
c2.Value = 10;
Console.WriteLine(c1.Value); // Output?
Enter fullscreen mode Exit fullscreen mode

Answer:

10 — because classes are reference types, c2 and c1 point to the same object.


25. String Interning and Equality

string a = "hello";
string b = "he" + "llo";
Console.WriteLine(object.ReferenceEquals(a, b)); // Output?
Enter fullscreen mode Exit fullscreen mode

Answer:

True — because of string interning in C#.

But this will be different:

string a = "hello";
string b = string.Concat("he", "llo");
Console.WriteLine(object.ReferenceEquals(a, b)); // Output?
Enter fullscreen mode Exit fullscreen mode

Answer:

False — different memory locations, even though content is same.


Cracking C# interviews requires more than just memorizing syntax—it’s about understanding the “why” behind each concept. The questions in this list are designed to help you think like a developer, not just a test taker. By practicing these tricky scenarios and analyzing the provided explanations and code samples, you'll be better prepared to tackle real-world problems and impress your interviewers. Keep coding, stay curious, and continue refining your skills—because that’s what sets great developers apart.

Happy Learning!

Comments 0 total

    Add comment