博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Enum.GetHashCode()的问题
阅读量:6941 次
发布时间:2019-06-27

本文共 1536 字,大约阅读时间需要 5 分钟。

先说一下,正常如果代码可以定义成枚举,我是比较倾向于定义成枚举的,类似这样:

public enum Gender    {        ///         /// 男        ///         [Description("男")]        Male = 1,        ///         /// 女        ///         [Description("女")]        Female = 2,        ///         /// 其他        ///         [Description("其他")]        Other = 3    }

  那么,通常,在代码中(例如linq),我倾向于用Enum来强制转为其他类型,这样如果我要增加一个枚举或者修改一个枚举的名字,那么我很容易查到有多少需要修改的地方,所以我对于那种“定义了枚举,却在用的时候写死的,诸如p.Gender=1这类的”代码是很痛恨的,因为如果需要修改,你不知道有多少地方需要修改,所以一般我的用法是:如果需要int,那就

(int)Gender.Male;

这样子用,需要修改的时候,只要改了枚举定义,然后alt+shift+F10即可。。。

 

说明一下,我们项目里面用的EF+MySQL,MySQL里面的类型定义成了INT(4),这样的话,到了Entity里面映射成的是sbyte类型,那么我们的代码就写成了这样:

public enum Status : sbyte    {        ///         /// 正常        ///         [Description("正常")]        Normal = 1,        ///         /// 冻结        ///         [Description("冻结")]        Frozen = 2    }

  继承自sbyte

在这里说明一下,我们这里用到一个叫QueryBuilder的东西,所以需要加linq查询的条件的时候是这样的:

deviceCondition.Equals(d => d.Status, ((sbyte)Status.Normal).ToString());

但是最初我用的时候不是这样的,当时可能脑子抽了,为了不强制转换,我写成了这样:

deviceCondition.Equals(d => d.Status, Status.Normal.GetHashCode().ToString());

看到了什么区别么?就是GetHashCode(),我在用之前甚至在另外的地方验证了一下,确认Gender.Male.GetHashCode().ToString()返回的是1,是我要的结果,但是等到MySQL查询不出来数据,让我一直以为是那个QueryBuilder的In条件筛选针对DateTime类型的问题,后来才发现,Status.Normal.GetHashCode().ToString()返回的并不是我要的1,而是一个四位的数字的时候,我意识到不是QueryBuilder的问题了。

原来,如果你的Enum没有继承自sbyte的时候,或者继承自Int的时候是没有问题的(Enum默认继承自Int?),但是,当继承自其他类型的时候,就不一定了。。。

 

最后,以后还是强制转换吧,既可以在编码的时候就暴露出错误,也方便在修改的时候,把用到的地方一次全部修改。。。

转载于:https://www.cnblogs.com/iguxiaobei/p/6235914.html

你可能感兴趣的文章
基于window.onerror事件 建立前端错误日志
查看>>
WP8开发日志(4):ResourceDictionary的外联
查看>>
[笔记]shell中算术扩展基础
查看>>
python 之中文全攻略
查看>>
MDT2012部署问题,Litetouch.wfs和Litetouch.vbs的区别
查看>>
__init__.py 作用详解
查看>>
puppet安装使用教程(四)--puppet的工作原理及工作过程
查看>>
mysql查询今天、昨天、上周
查看>>
【Composer】实战操作二:自己创建composer包并提交
查看>>
linux 安装
查看>>
基于Redis的作业执行设计总结
查看>>
php添加mysqli扩展
查看>>
右下角弹窗,CSS
查看>>
linux基础入门命令---whereis、whatis、which命令
查看>>
linux添加用户切换后显示-bash4.1$的解决办法
查看>>
JVM调优总结 -Xms -Xmx -Xmn -Xss
查看>>
JSP自定义标签
查看>>
Shell脚本学习三:生成随机数
查看>>
singleTop和singleTask有什么区别?(活动 Activity 四种加载模式)
查看>>
【腾讯Bugly干货分享】QFix探索之路—手Q热补丁轻量级方案
查看>>