آشنایی با مفاهیم نوع داده Enum و توسعه آن - قسمت دوم
نویسنده: علیرضا اسمرام
تاریخ: ۱۳۹۱/۰۵/۰۲ ۰:۳۲
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public enum Grade
{
Failing = 5,
BelowAverage = 10,
Average = BelowAverage + 5, // = 15
VeryGood = 18,
Excellent = 20
}
class Description : Attribute
{
public string Text;
public Description(string text)
{
Text = text;
}
}
public enum Grade
{
[Description("Mardood")]
Failing = 5,
[Description("Ajab Shansi")]
BelowAverage = 10,
[Description("Bad Nabood")]
Average = BelowAverage + 5,
[Description("Khoob Bood")]
VeryGood = 18,
[Description("Gol Kashti")]
Excellent = 20
}
public static class ExtensionMethodCls
{
public static string GetDescription(this Enum enu)
{
Type type = enu.GetType();
MemberInfo[] memInfo = type.GetMember(enu.ToString());
if (memInfo != null && memInfo.Length > 0)
{
object[] attrs = memInfo[0].GetCustomAttributes(typeof(Description), false);
if (attrs != null && attrs.Length > 0)
return ((Description)attrs[0]).Text;
}
return enu.ToString();
}
}
Console.WriteLine(grade.GetDescription()); // Print Bad Nabood
using System;
using System.Reflection;
namespace CSharpEnum
{
class Description : Attribute
{
public string Text;
public Description(string text)
{
Text = text;
}
}
public enum Grade
{
[Description("Mardood")]
Failing = 5,
[Description("Ajab Shansi")]
BelowAverage = 10,
[Description("Bad Nabood")]
Average = BelowAverage + 5,
[Description("Khoob Bood")]
VeryGood = 18,
[Description("Gol Kashti")]
Excellent = 20
}
public static class ExtensionMethodCls
{
public static string GetDescription(this Enum enu)
{
Type type = enu.GetType();
MemberInfo[] memInfo = type.GetMember(enu.ToString());
if (memInfo != null && memInfo.Length > 0)
{
object[] attrs = memInfo[0].GetCustomAttributes(typeof(Description), false);
if (attrs != null && attrs.Length > 0)
return ((Description)attrs[0]).Text;
}
return enu.ToString();
}
}
class Program
{
static void Main(string[] args)
{
const Grade grade = Grade.Average;
Console.WriteLine("Underlying type: {0}", Enum.GetUnderlyingType(grade.GetType()));
Console.WriteLine("Type Code : {0}", grade.GetTypeCode());
Console.WriteLine("Value : {0}", (int)grade);
Console.WriteLine("--------------------------------------");
Console.WriteLine(grade.ToString()); // name of the constant
Console.WriteLine(grade.ToString("G")); // name of the constant
Console.WriteLine(grade.ToString("F")); // name of the constant
Console.WriteLine(grade.ToString("x")); // value is hex
Console.WriteLine(grade.ToString("D")); // value in decimal
Console.WriteLine("--------------------------------------");
Console.WriteLine(grade.GetDescription()); // Print Bad Nabood
Console.ReadKey();
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ID", AutoSync=AutoSync.Always, DbType="Int NOT NULL IDENTITY", IsDbGenerated=true)]
return ((Description)attrs[0]).Text;
return ((DescriptionAttribute)attrs[0]).Description;
public class EnumObject
{
public Enum ValueMember { get; set; }
public int intValueMember
{
get { return int.Parse(ValueMember.ToString("D")); }
}
public string stringValueMember
{
get { return ValueMember.ToString(""); }
}
public string DisplayMember
{
get { return ValueMember.GetDescription(); }
}
}
public static List<EnumObject> GetEnumList(this Enum enu)
{
List<EnumObject> li = new List<EnumObject>();
foreach (var item in enu.GetType().GetEnumValues())
{
li.Add(new EnumObject { ValueMember = (Enum)item });
}
return li;
}
comboBox1.DataSource = Grade.VeryGood.GetEnumList();
comboBox1.DisplayMember = "DisplayMember";
comboBox1.ValueMember = "ValueMember";
public static List<EnumObject> EnumToList<T>()
{
Type enumType = typeof(T);
if (enumType.BaseType != typeof(Enum))
throw new ArgumentException("T must be of type System.Enum");
List<EnumObject> li = new List<EnumObject>();
foreach (var item in enumType.GetEnumValues())
{
li.Add(new EnumObject { ValueMember = (Enum)item });
}
return li;
}
comboBox1.DataSource =ExtensionMethodCls.EnumToList<Grade>();
comboBox1.DisplayMember = "DisplayMember";
comboBox1.ValueMember = "ValueMember";
public static class ExtensionMethodCls
{
public class EnumObject
{
public Enum ValueMember { get; set; }
public int intValueMember
{
get { return int.Parse(ValueMember.ToString("D")); }
}
public string stringValueMember
{
get { return ValueMember.ToString(""); }
}
public string DisplayMember
{
get { return ValueMember.GetDescription(); }
}
}
public static List<EnumObject> EnumToList<T>()
{
Type enumType = typeof(T);
if (enumType.BaseType != typeof(Enum))
throw new ArgumentException("T must be of type System.Enum");
List<EnumObject> li = new List<EnumObject>();
foreach (var item in enumType.GetEnumValues())
{
li.Add(new EnumObject { ValueMember = (Enum)item });
}
return li;
}
public static List<EnumObject> GetEnumList(this Enum enu)
{
List<EnumObject> li = new List<EnumObject>();
foreach (var item in enu.GetType().GetEnumValues())
{
li.Add(new EnumObject { ValueMember = (Enum)item });
}
return li;
}
public static string GetDescription(this Enum enu)
{
Type type = enu.GetType();
MemberInfo[] memInfo = type.GetMember(enu.ToString());
if (memInfo != null && memInfo.Length > 0)
{
object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attrs != null && attrs.Length > 0)
return ((DescriptionAttribute)attrs[0]).Description;
}
return enu.ToString();
}
}