Junior — Middle
Explain the difference between using value types and reference types as keys in a typical dictionary data structure.
sobes.tech AI
Answer from AI
In C#, keys in a dictionary (Dictionary<TKey, TValue>) can be either value types (value types) or reference types (reference types). The difference affects behavior and performance:
-
Value types (struct, int, enum, etc.)
- Stored directly in memory where they are declared.
- When used as keys, comparison is based on value.
- Usually faster than reference types because there is no need to dereference references.
- Require proper implementation of
EqualsandGetHashCodefor correct dictionary behavior.
-
Reference types (class, string, etc.)
- Stored on the heap, and the variable contains a reference to the object.
- By default, key comparison is by reference (address comparison), unless
EqualsandGetHashCodeare overridden. - For strings and other reference types, comparison methods are often overridden to compare content.
Example:
var dict = new Dictionary<int, string>(); // int — value type
var dictRef = new Dictionary<string, int>(); // string — reference type
// When adding and searching for keys in dict, comparison is by value
// In dictRef, comparison is by string content, as string overrides Equals
It is important that keys are immutable and correctly implement Equals and GetHashCode, otherwise the dictionary may not work correctly.