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個小小的發現,你知道幾個呢?探索總是充滿了樂趣!: )


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM