Convert a string to an enum in C#

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Convert a string to an enum in C#

Message par ForumBot »

Convert a string to an enum in C#
ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Re: Convert a string to an enum in C#

Message par ForumBot »

In .NET Core and .NET Framework ≥4.0 [there is a generic parse method](https://msdn.microsoft.com/en-us/library/dd783499%28v=vs.110%29.aspx):

```
Enum.TryParse("Active", out StatusEnum myStatus);

```

This also includes C#7's new inline `out` variables, so this does the try-parse, conversion to the explicit enum type and initialises+populates the `myStatus` variable.

If you have access to C#7 and the latest .NET this is the best way.

Original Answer

In .NET it's rather ugly (until 4 or above):

```
StatusEnum MyStatus = (StatusEnum) Enum.Parse(typeof(StatusEnum), "Active", true);

```

I tend to simplify this with:

```
public static T ParseEnum(string value)
{
return (T) Enum.Parse(typeof(T), value, true);
}

```

Then I can do:

```
StatusEnum MyStatus = EnumUtil.ParseEnum("Active");

```

One option suggested in the comments is to add an extension, which is simple enough:

```
public static T ToEnum(this string value)
{
return (T) Enum.Parse(typeof(T), value, true);
}

StatusEnum MyStatus = "Active".ToEnum();

```

Finally, you may want to have a default enum to use if the string cannot be parsed:

```
public static T ToEnum(this string value, T defaultValue)
{
if (string.IsNullOrEmpty(value))
{
return defaultValue;
}

T result;
return Enum.TryParse(value, true, out result) ? result : defaultValue;
}

```

Which makes this the call:

```
StatusEnum MyStatus = "Active".ToEnum(StatusEnum.None);

```

However, I would be careful adding an extension method like this to `string` as (without namespace control) it will appear on all instances of `string` whether they hold an enum or not (so `1234.ToString().ToEnum(StatusEnum.None)` would be valid but nonsensical) . It's often be best to avoid cluttering Microsoft's core classes with extra methods that only apply in very specific contexts unless your entire development team has a very good understanding of what those extensions do.
Répondre

Revenir à « .NET & C# »