enum值与string的转换

转自: http://www.cnblogs.com/ju2ender/archive/2010/05/07/1730064.html

因为原文网页在chrome32 下非常乱,没办法只好转过来了..

首先创建一个控制台项目,我命名为Enum_Test。添加个枚举Color,它有三个成员:Red、Blue、Green:

/// <summary>
/// 颜色枚举
/// </summary>
public enum Color
{
    /// <summary>
    /// 红色
    /// </summary>
    Red,

    /// <summary>
    /// 蓝色
    /// </summary>
    Blue, 

    /// <summary>
    /// 绿色
    /// </summary>
    Green
}

为每个枚举成员添加文本注释是很有必要的,项目中,面对数个没见过的单词是一件多么痛苦的事。: (

 

得到枚举的值

枚举中的每个成员是有个数字值与其对应的,得到这个值的方法是:

int hashCode = Color.Red.GetHashCode();

 

得到枚举的名字

这个很直接:

string str = Color.Red.ToString();

 

现在问题出现了,如何将这两种都能代表同一枚举的表示方法互相转换呢?我们用Enum.Parse()方法,它需要两个参数,第一个是你要转换的枚举类型,这里要用typeof()方法获取该枚举的类型,而不能直接将枚举放上去,第二个是你要转换的值。

 

将枚举的值转换为对应的名字

int hashCode = Color.Red.GetHashCode();
string enumParseStr = Enum.Parse(typeof(Color), hashCode.ToString()).ToString();

Enum.Parse()得到的值是object类型的,我们要转换的是值,得到的是名字,因此ToString()得到名字。

 

将枚举的名字转换为对应的值

string str = Color.Red.ToString();
int enumParseInt = Convert.ToInt32(Enum.Parse(typeof(Color), str));

这里要转换的是名字,得到的是值,因此用Convert.ToInt32()得到该值。

 

带给你的小发现

1. 默认枚举第一个值为0,后面的依次加1

例如上面的Color枚举,是没有为其制定值的,这是Red默认为0,依次Blue为1、Green为2。

 

2. 指定枚举的第一个值,它后面的值会从它开始依次加1

为枚举的成员定义值时,若这些值是连续的,不用依次为每个成员都定义,而只用为第一个成员定义值即可。

 

3. 可以无序定义枚举值

无序的定义是允许的,例如可以为Red定义为6,而Blue为1,Green为14。

 

4. 第2条与第3条相结合的情况

现在为Color添加一个颜色White。现在Color有4个成员:

/// <summary>
/// 颜色枚举
/// </summary>
public enum Color
{
    /// <summary>
    /// 红色
    /// </summary>
    Red = 14,

    /// <summary>
    /// 蓝色
    /// </summary>
    Blue,

    /// <summary>
    /// 绿色
    /// </summary>
    Green = 9,

    White
}

先只为Green定义值9,其他3个均为默认,这时,Green后面的White值为9加1,是10。这时Red为0, Blue为1。

再将Red定义为14,Green定义为9,其他均为默认。这时,Blue为14加1,White的值为9加1。

这4个小小的发现,你知道几个呢?探索总是充满了乐趣!: )

posted @ 2014-01-22 09:23  knightluffy  阅读(31141)  评论(0编辑  收藏  举报