Focusing on the subject, what am I going to write about the
- Can we assign an
Enum item to anything that's not of the
- Why would I even bother thinking about this?
- How can I handle converting something to
Enum and back to something again?
This all started when I had a database field with a
char, and needed to have a strongly typed way of handling it in my C# code, and then I figured it out, it's possible.
Using the Code
First of all, YES, we can assign an
Enum to something else, a
Just like you're thinking about it, yes:
public Enum myEnum
value1 = 'a',
value2 = 'b'
And why would I think about this?
Have you ever had to write some DAL code or mapping an existing database to an ORM, say Entity Framework, and you had fields which contained, for some particular reason, a list of controlled
chars, which aren't related to any other table, like a field called
State which had the possible values, '
Pending and '
Cancelled, and you want to have some nice and type-safe way of manipulating this field on code and at the same time a generic way, which can be used everywhere, well, you can do it using those
chars on an
public Enum State
Ready = 'R',
Pending = 'P',
Cancelled = 'C'
And how can I handle this? I'll sure try to do a
State.ToString() and it will return a number to me, why??
Because, actually, you can't have an
Enum item with an associated
char, but .NET lets you do this, and internally it converts your
char to its equivalent
int representation (ASCII).
So, now you're thinking, so now what? How can I get my
Simple enough, just cast the
Enum item to a
char first, and then you get its
string type = ((char)StateEnum).ToString();
This way, you can extract the
char from the
int, and get your value!
This is for persisting your data to your datasource (convert the
Enum item to the value that your datasource is expecting, the
But now, you need to convert your
char to the corresponding
Enum item, when you get your
char field from your datasource, right?
How can this be done?
Well I've coded a method to do that, with generics, let's see:
Code at pastebin
public static T ToEnum< T >(string @string)
throw new ArgumentException("Argument null or empty");
if (@string.Length > 1)
throw new ArgumentException("Argument length greater than one");
return (T)Enum.ToObject(typeof(T), @string);
So what you do here is accept a
string (could be a
char, it's just to make it simpler, since many ORMs map a
char on the database to
char), and then you check your parameters, if they're not
null, and if the length of the
string is one (which matches a
char), and then, you use the
ToObject method from the
Enum type, that accepts the return type you want to get, and the corresponding
Enum item value (
char) to convert to.
And that's it, you can use
chars with an
Enum object, isn't this awesome? When I got around this, I just thought about the numerous times that I needed it...
Hope this helps you as much as it has helped me.
Points of Interest
The key discovery was the conversion from the
char, you need to cast it to
char first, and only then you can have your
char value, because since the .NET Framework thinks it's an
int, you must convert it to
char (so it translates the
int to the equivalent
char on the ASCII table, like the old method
- 3rd May, 2010: Initial post