Reputation: 1189
I have the following enum
public enum MaritalStatus
{
Married = 'M',
Widow = 'W',
Widower = 'R',
Single='S'
}
In one function I have for exp: 'S'
, and I need to have MaritalStatus.Single
.
How can I get the enum from the character value? For string I found this solution, but it gets exception for Char.
YourEnum foo = (YourEnum) Enum.Parse(typeof(YourEnum), yourString);
Upvotes: 15
Views: 12251
Reputation: 11
I was able to read the enum value of the character by changing the charValue to string and then reading the first character and casting it to my ENUM type.
Looks like this in code :
( Marital Status ) ( charValue.ToString ( ) [ 0 ] )
Upvotes: 0
Reputation: 1
There are multiple ways to get the enum Name from value.
string name = ((MaritalStatus)'S').ToString();
string enumName = Enum.GetName(typeof(MaritalStatus), 'S');
In C# 6.0 you can use nameof
Upvotes: 3
Reputation: 1189
I guess found One solution for that:
(MaritalStatus)Enum.ToObject(typeof(MaritalStatus), 'S')
It gets me MaritalStatus.Single
Enum.ToObject(enumType, byte) is the signature.
Upvotes: 6
Reputation: 37299
The enum values, though defined with char
s actually equal to the int
representation of that char. It is as if you defined it as following:
public enum MaritalStatus
{
Married = 77,
Widow = 87,
Widower = 82,
Single=83
}
Convert char
to int
and then assign to the enum:
int m = 'M'; // char of `M` equals to 77
MaritalStatus status = (MaritalStatus)m;
Console.WriteLine(status == MaritalStatus.Married); // True
Console.WriteLine(status == MaritalStatus.Single); // False
After playing with it a bit and putting it into a one liner I see that even the conversion to an int
is not needed. All you need is to cast as the enum:
MaritalStatus status = (MaritalStatus)'M'; // MaritalStatus.Married
Upvotes: 12