如何从char值中检索Enum?

时间:2016-10-26 06:41:45

标签: c# parsing enums

我有以下枚举

public enum MaritalStatus
{
    Married = 'M',
    Widow = 'W',
    Widower = 'R',
    Single='S'
}

我在exp中使用的一个函数:'S',我需要MaritalStatus.Single

我如何从字符值中获取枚举? 对于字符串,我找到了这个解决方案,但它对Char来说是个例外。

YourEnum foo = (YourEnum) Enum.Parse(typeof(YourEnum), yourString);

4 个答案:

答案 0 :(得分:7)

枚举值虽然用char定义,但实际上等于该char的int表示。就好像你将它定义如下:

public enum MaritalStatus
{
    Married = 77,
    Widow = 87,
    Widower = 82,
    Single=83
} 

char转换为int,然后分配给枚举:

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

稍微玩一下并将其放入一个内衬后,我发现即使转换为int也不需要。你需要的只是演绎枚举:

MaritalStatus status = (MaritalStatus)'M'; // MaritalStatus.Married

答案 1 :(得分:3)

我想找到了一个解决方案:

   (MaritalStatus)Enum.ToObject(typeof(MaritalStatus), 'S')

它让我 MaritalStatus.Single

Enum.ToObject(enumType,byte)是签名。

答案 2 :(得分:1)

有多种方法可以从值中获取枚举名称。

string name =   ((MaritalStatus)'S').ToString();
string enumName =  Enum.GetName(typeof(MaritalStatus), 'S');

在C#6.0中,您可以使用nameof

答案 3 :(得分:0)

通过将charValue更改为字符串,然后读取第一个字符并将其转换为ENUM类型,我能够读取该字符的枚举值。

在代码中看起来像这样:

( Marital Status ) ( charValue.ToString ( ) [ 0 ] )