1. 程式人生 > >C#中Enum列舉型別的簡單使用

C#中Enum列舉型別的簡單使用

列舉型別的介紹: 

列舉型別是由一組特定常量構成的一組資料結構,是值型別的一種特殊形式,當需要一個由指定常量集合組成的資料型別時,使用列舉型別。列舉宣告可以顯式地宣告 byte、sbyte、short、ushort、int、uint、long 或 ulong 型別作為對應的基礎型別。沒有顯式地宣告基礎型別的列舉宣告意味著所對應的基礎型別是 int。 

注意點: 

1 對於沒有賦值的列舉型別,宣告的第一個列舉成員它的默值為零。以後的列舉成員值是將前一個列舉成員(按照文字順序)的值加1得到的。 

2 允許多個列舉成員有相同的值。沒有顯示賦值的列舉成員的值,總是前一個列舉成員的值+1。 

3 使用時注意型別轉換。

可以看出列舉型別的本質都是數字型別。在顯示的時候如果需要將列舉的值對映成其相對應的字串,下邊是一個簡單的解決方法。

public enum DataTypeId
    {
        [StringValue("Money")]
        Money = 0,
        [StringValue("Number")]
        Number = 1,
        [StringValue("Datetime")]
        Datetime = 2,
        [StringValue("LongText")]
        LongText = 3,
        [StringValue("ShortText")]
        ShortText = 4,
        [StringValue("IdeaType")]
        IdeaType = 5,
        [StringValue("Status")]
        Status = 6
    }

    public class StringValue : System.Attribute
    {
        private string _value;

        public StringValue(string value)
        {
            _value = value;
        }

        public string Value
        {
            get { return _value; }
        }

    }

    public static class StringEnum
    {
        public static string GetStringValue(Enum value)
        {
            string output = null;
            Type type = value.GetType();

            FieldInfo fi = type.GetField(value.ToString());
            StringValue[] attrs =
               fi.GetCustomAttributes(typeof(StringValue),
                                       false) as StringValue[];
            if (attrs.Length > 0)
            {
                output = attrs[0].Value;
            }

            return output;
        }
    }

在使用的時候,只需要呼叫相應的方法就可以了 StringEnum.GetStringValue(DataTypeID.Money) 輸出的字串即為該MyDataTypeId列舉值對應的字串

還有一種簡單的方法能夠得到列舉值對應的字串,DataTypeID.Money.ToString()返回的就是Money字串。在Web頁面顯示的時,DataTypeID.Money顯示的是0,而DataTypeID.Money。ToString()返回的是Money這個字串。