有没有一种简单的方法将c#enum转换为字符串,然后再返回?

时间:2011-01-27 13:59:50

标签: c# enums

我需要将枚举值列表转换为单个字符串以存储在我的数据库中;当我从数据库中检索时再转换回来。

每个枚举的值当前都是一个简单的整数,因此创建一个额外的表来处理这个问题感觉有点过分。

因此,在下面的示例中,如果用户选择Mother,Father和Sister,那么存储在数据库中的值将为“0,1,3”

  public enum MyEnum
    {
        Mother = 0,
        Father = 1,
        Gran = 2,
        Sister = 3,
        Brother = 4
    }

我是c#的新手,所以不确定是否有一个很好的开箱即用的方式 - 当谷歌狩猎时我找不到任何明显的东西!

提前干杯:)   - L

8 个答案:

答案 0 :(得分:9)

枚举明确能够转换为整数/从整数转换

int value = (int)MyEnum.Mother;

   MyEnum value = (MyEnum)1;

对于字符串,请使用ToStringEnum.Parse

string value = MyEnum.Mother.ToString();

MyEnum value = (MyEnum)Enum.Parse(typeof(MyEnum),"Mother");

答案 1 :(得分:4)

如果您将枚举值更改为:

[Flags]
public enum MyEnum
    {
        Mother = 1,
        Father = 2,
        Gran = 4,
        Sister = 8,
        Brother = 16,
    }

然后你可以将父亲和格兰存储为6

姊妹和兄弟等24岁

通过使用二进制数字,您不应通过组合它们获得重复值

答案 2 :(得分:3)

只需使用ToString转换为名称,然后使用Enum.TryParse(或Enum.Parse(如果您不在.NET 4上)转换回来。

如果您希望一个枚举字段包含多个值(例如MyEnum.Mother | MyEnum.Father),则需要将其转换为Flags enum@WraithNath suggested。否则,您所说的是单独存储每个选项(无法将MotherFather存储在当前设置的相同字段中。

答案 3 :(得分:3)

以下将根据要求通过“0,1,3”在Enum值数组之间来回转换:

MyEnum[] selection = { MyEnum.Mother, MyEnum.Father, MyEnum.Sister };

string str = string.Join(",", selection.Cast<int>());

MyEnum[] enm = str.Split(',').Select(s => int.Parse(s)).Cast<MyEnum>().ToArray();

答案 4 :(得分:2)

来自您的代码

MyEnum a = MyEnum.Mother;
string thestring = a.ToString();
MyEnum b = (MyEnum) Enum.Parse(typeof(MyEnum), thestring);

答案 5 :(得分:1)

String Equivelant

MyEnum value = MyEnum.Father;
value.ToString(); // prints Father

解析

(MyEnum)Enum.Parse(typeof(MyEnum), "Father"); // returns MyEnum.Father

答案 6 :(得分:0)

Enum可以转换为整数值。这可能是你最好的选择。

如果你真的想使用字符串,ToString将返回“母亲”,“父亲”,“格兰”等。从字符串中回来只会是一个函数:

private MyEnum GetEnumValue(string fromDB)
{
    if( fromDB == "Mother" ) return MyEnum.Mother;
    else if( fromDB == "Father") return MyEnum.Father;
    //etc. etc.
}

编辑: Ian回复的答案是更多的“C#-ey”方式,并且更具可扩展性(处理更灵活地为枚举添加新值)。

答案 7 :(得分:0)

根据Jamiec的建议(适合您的需要),如果您需要对您的演员进行防御性编码,请尝试:

if (Enum.IsDefined(typeof(MyEnum), <your database value>))
{
    // Safe to convert your enumeration at this point:
    MyEnum value = (MyEnum)1;   
}