我覺得枚舉是非常有用的。我已經寫了已經加入了更多的價值及其使用
首先,枚舉了一些擴展,還有的描述擴展方法
public static class EnumExtensions
{
public static string Description(this Enum value)
{
var entries = value.ToString().Split(ENUM_SEPERATOR_CHARACTER);
var description = new string[entries.Length];
for (var i = 0; i < entries.Length; i++)
{
var fieldInfo = value.GetType().GetField(entries[i].Trim());
var attributes = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
description[i] = (attributes.Length > 0) ? attributes[0].Description : entries[i].Trim();
}
return String.Join(", ", description);
}
private const char ENUM_SEPERATOR_CHARACTER = ',';
}
這將讓我定義的連接枚舉是這樣的:
public enum MeasurementUnitType
{
[Description("px")]
Pixels = 0,
[Description("em")]
Em = 1,
[Description("%")]
Percent = 2,
[Description("pt")]
Points = 3
}
並通過執行此操作獲取標籤:var myLabel = rectangle.widthunit.Description()
(不需要任何switch
語句)。
如果rectangle.widthunit = MeasurementUnitType.Pixels
這將雙向返回「px」,或者如果rectangle.widthunit = MeasurementUnitType.Pixels | MeasurementUnitType.Em
它將返回「px,em」。
然後,有一個
public static IEnumerable<int> GetIntBasedEnumMembers(Type @enum)
{
foreach (FieldInfo fi in @enum.GetFields(BindingFlags.Public | BindingFlags.Static))
yield return (int)fi.GetRawConstantValue();
}
,這將讓我穿越與詮釋基於價值的任何枚舉,並返回INT值本身。
我發現這些在一個有用的概念中非常有用。
字典比Enum好?你能解釋爲什麼嗎? – 2010-10-12 10:11:42
你完全混合了一切。反對枚舉的'switch'本身並不壞。有時候這是必要的,例如在提到的工廠。 – Andrey 2010-10-12 10:22:03
您應該使用帶有枚舉鍵的字典。這樣你就可以得到兩全其美的效果:強類型的字典和沒有更長的開關語句。 – VitalyB 2010-10-12 10:26:13