Convert a string to an enum in C#
Convert a string to an enum in C#
Convert a string to an enum in C#
Re: Convert a string to an enum in C#
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.
```
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.