讀【157個完美化C#的建議】一書的理解筆記 - 008
重點:Enum的內建遞增數值機制,所以避免給列舉型別的元素提供顯式的值
流程說明 |
1. Enum的機制 - 範例 |
2. 標準Enum |
3. 非連續性的Enum - 情境範例 |
4. 結論 |
1. Enum的機制 - 範例
我們有以下的宣告,可以思考
ValueA 值為多少
ValueB 值為多少
ValueC 值為多少
public enum MyWeek
{
Monday = 1,
Tuesday = 2,
ValueA,
ValueB,
Wednesday = 3,
ValueC,
Thursday = 4,
Friday = 5,
Saturday = 6,
Sunday = 7
}
Enum的機制會讓
ValueA = 3
ValueB = 4
ValueC = 4
// valueA = 3 ==>基於 Tuesday =2 + 1
int valueA = (int)MyWeek.ValueA;
// valueB = 4 ==>基於 Tuesday =2 + 2 (前一個Enum為 ValueTemp)
int valueB = (int)MyWeek.ValueB;
// valueC = 4 ==>基於 Wednesday =3 + 1
int valueC = (int)MyWeek.ValueC;
也因此ValueA 等於 星期三 Wednesday
MyWeek week = MyWeek.ValueA;
// valueAResult ==>True
bool valueAResult = week == MyWeek.Wednesday ? true : false;
2. 標準Enum
標準Enum 就因此是不建議放入整數值 (顯式的值)
/// <summary>
/// 標準的Enum 定義 - 不該提供顯示的值
/// </summary>
public enum MyWeekRight
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
3. 非連續性的Enum - 情境範例
但因應情境的考量,如果是非連續的Enum 則應該要放顯式值,才便於區分。
有以下宣告
/// <summary>
/// 如果有以下非連續性的Enum ,提供顯示的值才是明確的做法
/// </summary>
public enum CustomerMyweek
{
Monday = 0,
Tuesday = 0,
Wednesday = 1,
Thursday = 1,
Friday = 2,
Saturday = 2,
Sunday = 2
}
應用上就可以依照 Enum數值對應,一周所屬的狀態。
//非連續性的應用
int today = (int)CustomerMyweek.Saturday;
switch (today)
{
case 0:
Console.Write("每周的痛苦期");
break;
case 1:
Console.Write("每周的放空期");
break;
case 2:
Console.Write("每周的快樂期");
break;
}
4. 結論
連續性資料 : Enum 不設整數值
非連續性資料 : Enum設整數值
github連結(Vs2015) : 點我下載