範例:把 enum 型別轉換成一個陣列,該陣列的每一個元素即為列舉常數的名稱與值。
想跳過囉嗦的文字說明,可直接到 .NET Fiddle 上面查看並測試這些範例程式。
有時候,一些基本的代碼表沒有特別建立在資料庫裡,而是在程式中使用一個自訂的 enum 型別。比如說,假設我們為「會員類型」定義了如下的 enum 型別:
在某些場合,例如使用一個下拉清單(dropdown list)來顯示所有會員類型的時候,此時會需要取得所有會員類型的顯示名稱與對應的數值。我們可以定義一個類別來代表每一個列舉常數的內容(名稱與值)。
底下這個函式可以將先前的 MembershipType 中定義的每一個列舉常數轉成 MembershipTypeInfo 陣列:
可是如果將來 MembershipType 內容有變動時,例如增加一個叫做 Bronze 的會員類型,此時就得修改這個 GetMembershipTypes 方法。考慮到這點,則以下寫法比較好:
如果想要省掉 MembershipTypeInfo,改用泛型 Dictionary<int, string=""> 來取代,則可以寫成:
前往 .NET Fiddle 查看並測試這些範例程式
想跳過囉嗦的文字說明,可直接到 .NET Fiddle 上面查看並測試這些範例程式。
有時候,一些基本的代碼表沒有特別建立在資料庫裡,而是在程式中使用一個自訂的 enum 型別。比如說,假設我們為「會員類型」定義了如下的 enum 型別:
public enum MembershipType { General, Silver, Golden }
在某些場合,例如使用一個下拉清單(dropdown list)來顯示所有會員類型的時候,此時會需要取得所有會員類型的顯示名稱與對應的數值。我們可以定義一個類別來代表每一個列舉常數的內容(名稱與值)。
public class MembershipTypeInfo { public MembershipType Id { get; set; } public string Name { get; set; } }
底下這個函式可以將先前的 MembershipType 中定義的每一個列舉常數轉成 MembershipTypeInfo 陣列:
public static MembershipTypeInfo[] GetMembershipTypes_HardedCoded() { return new[] { new MembershipTypeInfo() { Id = MembershipType.General, Name = MembershipType.General.ToString() }, new MembershipTypeInfo() { Id = MembershipType.Silver, Name = MembershipType.Silver.ToString() }, new MembershipTypeInfo() { Id = MembershipType.Golden, Name = MembershipType.Golden.ToString() }, }; }
可是如果將來 MembershipType 內容有變動時,例如增加一個叫做 Bronze 的會員類型,此時就得修改這個 GetMembershipTypes 方法。考慮到這點,則以下寫法比較好:
public static MembershipTypeInfo[] GetMembershipTypes_Better() { var values = Enum.GetValues(typeof(MembershipType)).Cast<MembershipType>().ToArray(); var query = from value in values select new MembershipTypeInfo { Id = value, Name = value.ToString() }; return query.ToArray(); }
如果想要省掉 MembershipTypeInfo,改用泛型 Dictionary<int, string=""> 來取代,則可以寫成:
public static Dictionary<int, string> GetMembershipTypes_Dictionary() { var values = Enum.GetValues(typeof(MembershipType)).Cast<MembershipType>().ToArray(); var query = from value in values select new { Id = (int)value, Name = value.ToString() }; return query.ToDictionary(x => x.Id, x => x.Name); }
前往 .NET Fiddle 查看並測試這些範例程式
沒有留言: