各位在C#中的Enum 是否只能实现标识枚举?
见如下代码
public enum myEnum
{
CAT = 0
,DOG = 1
}
当我 使用 枚举中的标识时 如 CAT , DOG 时,很方便
当我需要 获得 Enum 的内容如 0 , 1 时 却, 很困难.并且, C# 中也不能像java一样, 在Enum中编写方法, 返回内容.
见如下代码
public enum myEnum
{
CAT = 0
,DOG = 1
}
当我 使用 枚举中的标识时 如 CAT , DOG 时,很方便
当我需要 获得 Enum 的内容如 0 , 1 时 却, 很困难.并且, C# 中也不能像java一样, 在Enum中编写方法, 返回内容.
解决方案 »
- win7下安装【完成vs2010】后安装【sql server2008】问题请教!有经验的朋友请进!
- c#代码怎么实现浏览器另存为.mht文件的全部功能
- 鼠标中键滚轮改变图像大小
- 一个开发好的本地程序怎样实现可远程(互联网)访问使用?
- 大家帮忙看看这个问题
- 求一正则表达式
- 怎么产生两时间之间的随机时间? c#
- 如何修改可执行文件的图标(在线等,急!!!)
- 【求助】如何划出一条线段,且可以对其选中,拉伸和旋转
- 水晶报表和鼠标有什么关系??我重装了系统,现在水晶报表打开后,一动鼠标就出错
- [求助]C# Winform 如何用Windows身份验证方式还原数据库.bak文件?
- winform最小化后隐藏到右下角,单击或双击后恢复
public enum myEnum : byte//限制长度为1字节
{
CAT = 0
,DOG = 1
}
byte be = (byte)myEnum.CAT;
{
public const int CAT = 0;
public const int DOG = 1;
}
int i=(int)myEnum.CAT;
{
CAT = 0
,DOG = 1
}得到myEnum.CAT的枚举值:
int index=myEnum.CAT.GetHashCode();
-----------
不困难...enum重写了ToString方法所以输出的是Name,你要值就强制转换好了,不麻烦啊...并且, C# 中也不能像java一样, 在Enum中编写方法, 返回内容.
-----------
C# 3.0以上能通过扩展方法给enum添加新方法,实际上扩展方法可以给任意现有类型添加新方法...
public enum TestEnum:byte
{
a = 0,
b = 1,
c = 2,
d = 4,
e = 8
}
//=========================================== //枚举,通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方便地访问它。但是,还可以将枚举
//嵌套在类或结构中。
//------------------------------------------------------------------------------------------------------------
//Enum.IsDefined(Type enumType,Object value) 返回指定枚举中是否存在具有指定值的常数的指示。 value 为enumType的常数的值或名称。
Console.WriteLine(Enum.IsDefined(typeof(TestEnum), "e")); //True value 为常数的名称。
Console.WriteLine(Enum.IsDefined(typeof(TestEnum), (byte)8)); //True value 为常数的值。 注:必须为基础类型 Byte
Console.WriteLine(Enum.IsDefined(typeof(TestEnum), (byte)9)); //False value 为常数的值。 Console.WriteLine(Enum.GetName(typeof(TestEnum), (byte)8)); //e
Console.WriteLine(Enum.GetUnderlyingType(typeof(TestEnum))); //System.Byte
//------------------------------------------------------------------------------------------------------------
//((Type)Value).ToString() (常用于列举枚举常数组合值(Flag))
for (int i = 0; i < 20; i++)
{
Console.WriteLine("{0}:{1}", i, ((TestEnum)i).ToString());
//TestEnum te = TestEnum.b; Console.WriteLine(te.ToString());
}
//-----------------------------------------------------------------------------------------------------------
foreach (Environment.SpecialFolder folder in Enum.GetValues(typeof(Environment.SpecialFolder)))
{
//Console.Write("{0,23} ", folder);
Console.Write(folder.ToString().PadRight(23, ' '));
Console.WriteLine(Environment.GetFolderPath(folder));
}
//------------------------------------------------------------------------------------------------------------
foreach (string St in Enum.GetNames(typeof(Environment.SpecialFolder)))
{
Console.Write(St.PadRight(23, ' '));
Console.WriteLine((int)Enum.Parse(typeof(Environment.SpecialFolder), St));
}
//------------------------------------------------------------------------------------------------------------
//Enum.Parse将 "一个或多个枚举常数的名称或数字值的字符串" 表示转换成等效的枚举对象。
TestEnum Te1 = (TestEnum)Enum.Parse(typeof(TestEnum), "b,C,d", true); //Dot Forget :(TestEnum)
TestEnum Te2 = (TestEnum)Enum.Parse(typeof(TestEnum), "7", true); Console.WriteLine("{0}---{1}", Te1.ToString(), (byte)Te1); //b, c, d---7
Console.WriteLine("{0}---{1}", Te2.ToString(), (byte)Te2); //b, c, d---7
//------------------------------------------------------------------------------------------------------------
TestEnum Te3 = TestEnum.b;
Console.WriteLine(Enum.Format(typeof(TestEnum), Te3, "d")); //1 十进制
Console.WriteLine(Enum.Format(typeof(TestEnum), Te3, "x")); //01 十六进制 (不带前导“0x”) Console.WriteLine(Enum.Format(typeof(TestEnum), 8, "g")); //e 如果 value 等于某个已命名的枚举常数,则返回该常数的名称;否
Console.WriteLine(Enum.Format(typeof(TestEnum), 9, "g")); //9 则返回 value 的等效十进制数。
//------------------------------------------------------------------------------------------------------------
{
CAT = 3 ,DOG = 5,COW=7
}你可以枚举常数的值给与指定,如上
也可以默认,如:
public enum myEnum
{
CAT ,DOG ,COW
}
默认值从0开始,并递增。
得到ENUM的常数的值:
myEnum me = myEnum.DOG;
Console.WriteLine(" 值为:" + (int)me);// 值为:1
我是说楼主使用enum的 值 是恶习。合理使用enum是个好习惯
tangmac
与 kinghongchen已给分