📋 Enum = Set of Named Constants
Magic numbers are bad. Enums give names to numbers. Readable code, type safety, IntelliSense.
❌ Magic Numbers
if (status == 1) { } // What is 1?
if (role == 2) { } // What is 2?
✅ Enum
if (status == OrderStatus.Pending) { }
if (role == UserRole.Admin) { }
🎯 Enum Usage
public enum OrderStatus
{
Pending,
Processing,
Shipped,
Delivered,
Cancelled
}
public enum UserRole
{
Guest,
User,
Moderator,
Admin,
SuperAdmin
}
// With custom values
public enum Priority
{
Low = 1,
Medium = 5,
High = 10,
Critical = 20
}
// With flags (bitwise)
[Flags]
public enum Permissions
{
None = 0,
Read = 1,
Write = 2,
Delete = 4,
Admin = Read | Write | Delete // 7
}
// Usage
var status = OrderStatus.Pending;
if (status == OrderStatus.Shipped) { }
// Switch
switch (status)
{
case OrderStatus.Pending: break;
case OrderStatus.Shipped: break;
}
// Convert
int value = (int)OrderStatus.Shipped;
OrderStatus status = (OrderStatus)2;
// Get names
string name = Enum.GetName(typeof(OrderStatus), 2);
string[] names = Enum.GetNames(typeof(OrderStatus));
// Parse
OrderStatus parsed = Enum.Parse("Shipped");
💡 Best Practices
- Use enums for fixed sets of values (days, statuses, roles)
- Use PascalCase for enum names
- Use [Flags] for bitwise combinations
- Avoid enums with large values
- Consider using records for more complex enums
“Numbers everywhere. Switched to enums. Code is self-documenting. No more magic numbers. Essential for readable code.”
