cs——enum

 
一、cs不支持Enum隐式转换为数字基础类型(比如int)
比如:
定义了如下枚举:
public enum TestEnum
{
TE_A = 1,
TE_B = 2,
}
和如下方法:
public int GetVal()
{
return TestEnum.TE_A;
}
编译时会提示如下异常:
error CS0266: Cannot implicitly convert type `TestEnum' to `int'. An explicit conversion exists (are you missing a cast?)
解决方案:
(1)借助Convert.ToInt32做类型转换。
public int GetVal()
{
return Convert.ToInt32(TestEnum.TE_A);
}
(2)显式类型转换。
public int GetVal()
{
return (int)TestEnum.TE_A;
}
 
二、cs不支持数值基础类型隐式转枚举类型
依旧拿上面的枚举TestEnum说例,定义如下方法:
public TestEnum GetEnum()
{
return 1;
}
编译时会提示如下异常:
error CS0266: Cannot implicitly convert type `int' to `TestEnum'. An explicit conversion exists (are you missing a cast?)
解决方案:
(1)借助Enum.ToObject()
public TestEnum GetEnum()
{
var param = Convert.ToInt64(1);
return (TestEnum)Enum.ToObject(typeof(TestEnum), param);
}
(2)显式强制类型转换。
 
三、Enum.ToObject说明
参数:
第一个参数为需要转换成的枚举类型。
第二个参数为需要转换的数值。
使用时注意如下情况:
(1)目标类型不是枚举时,编译是不会提示任何异常。可通过Type.IsEnum()来判断
(2)目标枚举类型并不包含该值时,编译不会提示异常,运行时转换成功后所获得的值可正常使用。
类似的接口还有Enum.Parse()
 
四、枚举的使用情景
个人认为,枚举的使用情景终归以下两种:
一、元素使用的情景间是互斥,例如某枚举序列表示星期,序列的使用情景为标记某个时刻,指定时刻里不可能既是星期一又是星期二;
二、存在某情景多个元素并存,例如某枚举序列表示麻痹和眩晕等角色异常,序列的使用情景为标记某个时刻角色的状态,指定时刻角色是可以既触发麻痹又触发眩晕的。
 
基于上述情景二,我们会给枚举加上[Flags]特性(也可以是[FlagsAttribute],两者是同一个东西)来标记为它是位域。非Flags枚举也是可直接进行位操作的。
注意:当枚举用作位域时,元素的值应向位操作做合理的考虑。
 
参考:
 
 
 

转载于:https://www.cnblogs.com/xiaobalang/p/6503700.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值