Enum #csharp
enum sex:byte
{
male=0;
female=1;
}
enum sexy:int
{
male=0;
female=1;
}
sex A=sex.male; //A在栈中占用一个字节的位置
sexy B=sexy.male //B在栈中占用四个字节的位置 因为int是4字节整数
枚举类型默认时:public enum Icon_Type : int
byte 是 0~255之间的整数,int 是-2147483648~2147483647
//int string Enum之间的转换
class Program
{
static void Main(string[] args)
{
MyColor Page = (MyColor)1;
//输出red
Console.WriteLine(Page);
MyColor Page2 = (MyColor)2;
//输出2
Console.WriteLine(Page2);
//enum -> int
int num = (int)Countries.中国;
//num=5
int[] nums = (int[])Enum.GetValues(typeof(Countries));
//nums={5,6,7,8,9}
//int -> enum
Countries country = (Countries)8;
//country=Countries.英国
//enum -> string
string str2 = Enum.GetName(typeof(Countries), 7);
Console.WriteLine(str2);
string[] strArray = Enum.GetNames(typeof(Countries));
//strArray={"中国","美国","俄罗斯","英国","法国"};
//string-> enum
Countries myCountry = (Countries)Enum.Parse(typeof(Countries), "中国");
//myCountry=Countries.中国
Console.ReadKey();
}
}
enum MyColor { Red=1, Yellow=3, Blue=4 };
enum Countries
{
中国 = 5,
美国,
俄罗斯,
英国,
法国
}
//Enum遍历
namespace Enum遍历
{
enum aa { a = 1, b = 2,c= 3};
class Program
{
static void Main(string[] args)
{
foreach (var a in Enum.GetValues(typeof(aa)))
{
string s = $" {a} ";
object num = a;
string name = a.TpString();
Console.WriteLine(s);
}
//上面输出的是 a b c
foreach (int a in Enum.GetValues(typeof(aa)))
{
string s = $" {a} ";
Console.WriteLine(s);
}
//上面这段代码输出的是 1 2 3
//感觉这个可能是枚举类型的一个方法,虽然Enum.GetValues返回的是一个数组,但是这个数组
//是string类型数组,还是int类型数组,是有var 或者int决定的
Console.ReadKey();
}
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Dynamic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp10
{
class Program
{
static void Main(string[] args)
{
var list = EnumHelper.GetMemberValues<Test>();
List<object> outobjects = new List<object>();
foreach (var item in list)
{
dynamic d = new ExpandoObject();
d.Name = item;
d.Description = EnumHelper.GetDescription(EnumHelper.GetInstance<Test>(item.ToString()));
outobjects.Add(d);
}
foreach (dynamic item in outobjects)
{
Console.WriteLine(item.Name);
Console.WriteLine(item.Description);
}
Console.Read();
}
}
public enum Test
{
[Description("sdfasdfa")]
One,
[Description("第二")]
Two
}
public static class EnumHelper
{
public static string GetDescription(this Enum value)
{
Type type = value.GetType();
string name = Enum.GetName(type, value);
if (name != null)
{
FieldInfo field = type.GetField(name);
if (field != null)
{
DescriptionAttribute attr =
Attribute.GetCustomAttribute(field,
typeof(DescriptionAttribute)) as DescriptionAttribute;
if (attr != null)
{
return attr.Description;
}
}
}
return null;
}
public static T GetInstance<T>(object member)
{
return GetInstance<T>(member.ToString());
}
public static T GetInstance<T>(string member)
{
return (T)Enum.Parse(typeof(T), member, true);
}
public static string[] GetMemberNames<T>()
{
return Enum.GetNames(typeof(T));
}
public static Array GetMemberValues<T>()
{
return Enum.GetValues(typeof(T));
}
public static Type GetUnderlyingType(Type enumType)
{
return Enum.GetUnderlyingType(enumType);
}
public static bool IsDefined<T>(string member)
{
return Enum.IsDefined(typeof(T), member);
}
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp10
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(EnumHelper.GetDescription(Test.One));
if (EnumHelper.IsDefined<Test>("Twoss"))
{
var ss = EnumHelper.GetInstance<Test>("Twoss");
}
else
{
Console.WriteLine("未定义这个数值");
}
var strs = EnumHelper.GetMemberNames<Test>();
foreach (var item in strs)
{
Console.WriteLine(item);
}
Console.Read();
}
}
public enum Test
{
[Description("sdfasdfa")]
One,
[Description("第二")]
Two
}
public static class EnumHelper
{
public static string GetDescription(this Enum value)
{
Type type = value.GetType();
string name = Enum.GetName(type, value);
if (name != null)
{
FieldInfo field = type.GetField(name);
if (field != null)
{
DescriptionAttribute attr =
Attribute.GetCustomAttribute(field,
typeof(DescriptionAttribute)) as DescriptionAttribute;
if (attr != null)
{
return attr.Description;
}
}
}
return null;
}
public static T GetInstance<T>(object member)
{
return GetInstance<T>(member.ToString());
}
public static T GetInstance<T>(string member)
{
return (T)Enum.Parse(typeof(T), member, true);
}
public static string[] GetMemberNames<T>()
{
return Enum.GetNames(typeof(T));
}
public static Array GetMemberValues<T>()
{
return Enum.GetValues(typeof(T));
}
public static Type GetUnderlyingType(Type enumType)
{
return Enum.GetUnderlyingType(enumType);
}
public static bool IsDefined<T>(string member)
{
return Enum.IsDefined(typeof(T), member);
}
}
}
//Flag位运算例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
Style ss = Style.ShowBorder | Style.ShowCaption;
Console.WriteLine(ss.ToString()); //显示 : ShowBorder,ShowCaption
int i = (int) ss; //强制转换可以直接将位运算计算成计算结果
Console.WriteLine(i); //显示:3
Style s2 = (Style)Enum.Parse(typeof(Style), ss.ToString());
Console.WriteLine(s2); //显示:ShowBorder,ShowCaption
s2 = s2 & (~Style.ShowCaption); //从枚举的多个Flags状态中去掉一个元素。
Console.WriteLine(s2); // 显示: ShowBorder
Console.Read();
}
}
[Flags]
enum Style
{
ShowBorder = 1, //是否显示边框
ShowCaption = 2, //是否显示标题
ShowToolbox = 4 //是否显示工具箱
}
}
//DisplayName用法只能在配合MVC前台的
//@Html.DisplayFor(modelItem => item.FlagsEnum)的时候显示,后台使用的还是Enum定义中的值
public enum MyEnum : byte
{
[Display(Name = "Zéro")]
Zero,
}
//为Enum写一个扩展方法
public static string GetDescription(this Enum value)
{
Type type = value.GetType();
string name = Enum.GetName(type, value);
if (name != null)
{
FieldInfo field = type.GetField(name);
if (field != null)
{
DescriptionAttribute attr =
Attribute.GetCustomAttribute(field,
typeof(DescriptionAttribute)) as DescriptionAttribute;
if (attr != null)
{
return attr.Description;
}
}
}
return null;
}
//使用的例子如下:
public enum MyEnum{
[Description("Description for Foo")]
Foo,
[Description("Description for Bar")]
Bar
}
MyEnum x = MyEnum.Foo;string description = x.GetDescription();
// //只能使用enum,写Enum是错误的