Convert String to Enum in C#


Here you will learn how to convert the string representation of enum member to enum in C#.

Use the following methods to convert from the string to enum:

Method Description
Enum.TryParse() Converts the string representation of one or more enum member names or numeric values to an equivalent enum objects. It returns true if the conversion succeeded and false if failed. It is recommended to use the Enum.TryParse() over Enum.Parse() method.
Enum.Parse() Converts the string representation of one or more enum member name or numeric value to an equivalent enum object.

Enum.TryParse() Method

The Enum.TryParse() method converts the string representation of enum member name or numeric value to an equivalent enum object.

Enum.TryParse() Overloads
bool TryParse(string value, out object result)
bool TryParse(string value, bool ignoreCase, out object result)
bool TryParse<TEnum>(string value, out TEnum result)
bool TryParse<TEnum>(string value, bool ignoreCase, out TEnum result)

The Enum.TryParse() method returns a boolean to indicate whether the specified string is converted to enum or not. Returns true if the conversion succeeded; otherwise, returns false. The result would be stored in an out parameter result if the conversion succeded. It never throws exceptions if the conversion fails; instead, it returns false.

It is best practice to use the TryParse() method that does not raise exceptions.

The following example shows the conversion of string to enum using TryParse<TEnum>() method in .NET 4.x and .NET 5:

Example: Convert String using Enum.TryParse()
enum Week
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}
public static void Main()
{
    var day1 = "Monday";
    var day2 = "MONDAY";
    var day3 = "SomeOtherDay";

    Week week1, week2, week3;

    if (Enum.TryParse<Week>(day1, out week1))
        Console.WriteLine("{0} converted to {1}", day1, week1);

    if (Enum.TryParse<Week>(day2, true, out week2))  // ignore cases
        Console.WriteLine("{0} converted to {1}", day2, week2);

    if (Enum.TryParse<Week>(day3, true, out week3))  // ignore cases
        Console.WriteLine(Console.WriteLine("{0} converted to {1}", day3, week3););
    else
        Console.WriteLine("Conversion Faild for {0}", day3);

}
Output:
Monday converted to Monday
MONDAY converted to Monday
Conversion Faild for SomeOtherDay

In the above example, Enum.TryParse() converts the three different strings to enum members. A string MONDAY converted to enum by passing true to ignore cases of the string value. However, Enum.TryParse<Week>(day3, true, out week3) returns false because it cannot find a member named "SomeOtherDay". So, instead of throwing an exception, returns false boolean value.

Enum.Parse() Method

The Enum.Parse() method parse the specified string to enum member. However, it throws an exception if the specified string does not match with any enum member name.

The Enum.Parse() method has the following overloads in .NET Framework 4.x and 5:

Enum.Parse() Overloads
Parse(Type enumType, string value)
Parse(Type enumType, string value, bool ignoreCase)

//.NET 5.0 includes the following overloads:
Parse<TEnum>(string value, bool ignoreCase)
Parse<TEnum>(string value)

The following example demonstrates the conversion of string to enum using the Parse() method in .NET 4.x:

Example: String to Enum in .NET 4.x
enum Week
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

public static void Main()
{
    string day1 = "Monday";
    string day2 = "MONDAY";
    string day3 = "SomeOtherDay";

    Week weekDay1 = (Week) Enum.Parse(typeof(Week), day1);
    Week weekDay2 = (Week) Enum.Parse(typeof(Week), day2, true); // ignore case
    
    // the following will throw an exception
    //Week weekDay3 = (Week) Enum.Parse(typeof(Week), day3);
    
    Console.WriteLine(weekDay1);
    Console.WriteLine(weekDay2);
}

In the above example, the Enum.Parse() method converts the string value day1 to enumeration type and returns the result as an enumeration object. The boolean parameter specifies if the operation is case-insensitive. Pass true to ignore case to compare string and enum member values.

Use the generic Enum.Parse<TEnum>() method in .NET 5.x:

Example: String to Enum in .NET 5
enum Week
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

public static void Main()
{
    var day1 = "Monday";
    var day2 = "MONDAY";
    var day3 = "SomeOtherDay";

    Week weekDay1 = Enum.Parse<Week>(day1);
    Week weekDay2 = Enum.Parse<Week>(day2, true); // ignore cases
    
    // the following will throw an exception
    //Week weekDay3 = (Week) Enum.Parse<Week>(day3);

    Console.WriteLine(weekDay1);
    Console.WriteLine(weekDay2);
}

Note that the string value must match with any member names; otherwise it will throw an exception. Use the Enum.IsDefined() method to check if a given string name or integer value is defined in a specified enumeration.

Example: Check Member Before Conversion
if(Enum.IsDefined(typeof(Week), day3){
    Week week3 = Enum.Parse<Week>(day3);
}
else{
    Console.WriteLine("Wrong Week Day");
}

Thus, the conversion of String to Enum can be implemented using the Enum.Parse() and Enum.TryParse() method.