?? Null-Coalescing = Default Values
Null checks are verbose. Null-coalescing operator provides defaults. Clean, concise, safe.
❌ Verbose Null Check
string name;
if (user != null && user.Name != null)
name = user.Name;
else
name = "Unknown";
✅ Null-Coalescing
string name = user?.Name ?? "Unknown";
📝 Null-Coalescing Examples
// Null-coalescing (??)
string name = user?.Name ?? "Unknown";
int age = user?.Age ?? 0;
double price = product?.Price ?? 0.0;
// Null-coalescing assignment (??=)
string name;
name ??= "Default Name"; // Only if null
// Null-conditional (?.)
string firstName = user?.Name?.FirstName; // Chain safely
int? orderCount = user?.Orders?.Count();
string street = user?.Address?.Street ?? "No address";
// Combining operators
string fullName = user?.FirstName?.ToUpper() ?? "Unknown";
string email = user?.Email?.Trim() ?? "No email";
// With nullable types
int? nullableAge = null;
int age = nullableAge ?? 25; // 25 if null
// With dictionaries
string value = dict?.GetValueOrDefault("key") ?? "default";
// With LINQ
var firstItem = list?.FirstOrDefault() ?? new Item();
// Configuration
string apiKey = config["ApiKey"] ?? throw new Exception("ApiKey missing");
int timeout = int.Parse(config["Timeout"] ?? "30");
// Null Coalescing Benefits
- Cleaner and more concise code
- No null reference exceptions
- Safe navigation through chains
- Default values for nulls
- Improved readability
💡 Null-Coalescing Tips
- Use ?? for default values
- Use ?. for safe navigation
- Use ??= for assignment
- Combine with optional chaining
- Improves readability
“Null-coalescing handles null elegantly. No more verbose checks. Essential for modern C#.”
