Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert CSV from enum flags and vice versa

Consider the following enum:

[Flags]
public enum MyEnum
{
    Option1 = 0,
    Option2 = 1,
    Option3 = 2,
    Option4 = 4
}

Is there a way in which I can get the string equivalent (not the value) as a CSV string? Normally I can use the Enum.GetName function to convert a type to the string representation, however, if you use a combination this returns null.

So basically I would like to convert:

var options = MyEnum.Option1 | MyEnum.Option3;

into

"Option1, Option3" 

Then I would like to be able to convert "Option1, Option3" back to MyEnum.Option1 | MyEnum.Option2.

Suggestions?

like image 376
James Avatar asked Aug 09 '11 13:08

James


1 Answers

Well, aside from Option1 not making much sense in a flags enum, this just works by default using Enum.Parse and Enum.ToString().

Start with this:

var options = MyEnum.Option2 | MyEnum.Option3;
Console.WriteLine(options.ToString());
// Outputs: Option2, Option3

Then you can always do this:

var options2 = (MyEnum) Enum.Parse(typeof (MyEnum), "Option2, Option3");

Now try this:

Console.WriteLine((options2 & MyEnum.Option2) == MyEnum.Option2);
Console.WriteLine((options2 & MyEnum.Option4) == MyEnum.Option4);
// Outputs:
//    true
//    false

Which seems like it does exactly what you wanted (again, ignoring the fact that Option1 in your example will never occur)

docs: Enum.Parse

like image 192
Jamiec Avatar answered Sep 18 '22 01:09

Jamiec