</>
Skip to content
C# lessons (25/34)

C# — Enums

Basic enum

using System;

enum Color { Red, Green, Blue }

class Program
{
    static void Main()
    {
        Color favorite = Color.Red;
        Console.WriteLine(favorite);        // Red
        Console.WriteLine((int)favorite);   // 0

        // All values
        foreach (Color c in Enum.GetValues<Color>())
        {
            Console.WriteLine($"{c} = {(int)c}");
        }
    }
}

Custom values

using System;

enum HttpStatus
{
    OK = 200,
    NotFound = 404,
    ServerError = 500
}

class Program
{
    static void Main()
    {
        HttpStatus code = HttpStatus.NotFound;
        Console.WriteLine($"{code}: {(int)code}"); // NotFound: 404
    }
}

Flags enum

using System;

[Flags]
enum Permissions
{
    None = 0,
    Read = 1,
    Write = 2,
    Execute = 4,
    All = Read | Write | Execute
}

class Program
{
    static void Main()
    {
        Permissions userPerms = Permissions.Read | Permissions.Write;
        Console.WriteLine(userPerms); // Read, Write

        // Check
        bool canRead = userPerms.HasFlag(Permissions.Read);
        Console.WriteLine($"Can read: {canRead}"); // True

        // Add
        userPerms |= Permissions.Execute;
        Console.WriteLine(userPerms); // Read, Write, Execute

        // Remove
        userPerms &= ~Permissions.Write;
        Console.WriteLine(userPerms); // Read, Execute
    }
}

Enum methods

using System;

enum Day { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }

class Program
{
    static void Main()
    {
        // Parse
        Day day = Enum.Parse<Day>("Friday");
        Console.WriteLine(day); // Friday

        // TryParse
        if (Enum.TryParse<Day>("Monday", out Day d))
        {
            Console.WriteLine($"Parsed: {d}");
        }

        // GetName
        string name = Enum.GetName(typeof(Day), 2);
        Console.WriteLine(name); // Wednesday

        // IsDefined
        bool valid = Enum.IsDefined(typeof(Day), 5);
        Console.WriteLine($"Valid: {valid}"); // True

        // GetNames / GetValues
        string[] names = Enum.GetNames<Day>();
        Console.WriteLine(string.Join(", ", names));
    }
}

Enum in switch

using System;

enum Season { Spring, Summer, Autumn, Winter }

string GetDescription(Season season) => season switch
{
    Season.Spring => "Flowers bloom",
    Season.Summer => "Sun is hot",
    Season.Autumn => "Leaves fall",
    Season.Winter => "Snow falls",
    _ => "Unknown"
};

class Program
{
    static void Main()
    {
        Console.WriteLine(GetDescription(Season.Summer)); // Sun is hot
    }
}

String to enum

using System;

enum Fruit { Apple, Banana, Cherry }

class Program
{
    static void Main()
    {
        // From string
        string input = "Banana";
        if (Enum.TryParse<Fruit>(input, out Fruit fruit))
        {
            Console.WriteLine($"Fruit: {fruit}"); // Banana
        }

        // To string
        string fruitName = Fruit.Cherry.ToString();
        Console.WriteLine(fruitName); // Cherry

        // Display attribute
        var values = Enum.GetValues<Fruit>();
        foreach (var f in values)
        {
            Console.WriteLine($"{f} = {(int)f}");
        }
    }
}

Enum with Display attribute

using System;
using System.ComponentModel.DataAnnotations;

enum Priority
{
    [Display(Name = "Low Priority")]
    Low = 1,

    [Display(Name = "Medium Priority")]
    Medium = 2,

    [Display(Name = "High Priority")]
    High = 3
}

class Program
{
    static void Main()
    {
        Priority p = Priority.High;

        // Get Display attribute
        var field = p.GetType().GetField(p.ToString());
        var attr = Attribute.GetCustomAttribute(field, typeof(DisplayAttribute))
            as DisplayAttribute;

        Console.WriteLine(attr?.Name ?? p.ToString()); // High Priority
    }
}

Best practices

  • Use enum for fixed sets of related constants
  • Use [Flags] for combinable values
  • Use Enum.TryParse instead of casting
  • Consider enum class pattern with static readonly for complex cases
  • Use 0 as the default/none value for flags

Mini Practice

Write C# code that:

  1. Creates a [Flags] enum for file permissions
  2. Uses Enum.Parse to convert a string to an enum
  3. Writes a switch expression using enum values
  4. Demonstrates flag operations (add, remove, check)

Up Next

In the next lesson, you'll learn about Exceptions — error handling in C#.

Related Topics

Frequently Asked Questions about Enums

What is Enums in C#?

Enums is a fundamental concept in C#. This lesson explains it step by step with clear examples, making it easy for beginners to understand.

How do I learn Enums?

Start by reading the explanation above, then try the code examples. Practice by modifying the examples and experimenting with different values. Hands-on practice is the best way to learn Enums.

Why is Enums important in C#?

Enums is essential for C# development. Understanding this concept will help you write better code and solve real-world problems more effectively.