枚举类型转换

uxspy 2009-10-10 05:37:35

//这是DAL代码:
DbParameter[] parms =
{
DbHelper.MakeInParam("@order_id", (DbType)SqlDbType.Int, 4, orderId)
};

//这是sqldbprovider代码:
public DbParameter MakeParam(string ParamName, DbType dbType, Int32 Size)
{
param = new SqlParameter(ParamName, (SqlDbType)dbType, Size);
}


其中sqldbprovider是dbhelper的一个provider,这个provider由一个databaseprovider工厂生产,典型的抽象工厂,我就不说了

我的问题是:

1.dal中,我把sqldbtype强制打包成dbtype,而我到了sqldbprovider里还可以还原成原始的sqldbtype,(枚举类型也能这样强制类型转换?)
2.我如何判断public DbParameter MakeParam(string ParamName, DbType dbType, Int32 Size)中的那个dbType是Dbtype类型还是sqlDbType类型?我用了is,不行!因为他们没什么兼容关系可言

...全文
199 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
uxspy 2009-11-17
  • 打赏
  • 举报
回复
好吧,问题解决了,我说明下为什么吧,首先,枚举没有继承关系,(我曾经还以为sqldbtype继承自dbtype呢,多么的愚蠢,枚举是值类型),举例,首先,我把一个sqldbtype,假如值为10(sqldbtype.int),强制转成dbtype,如果dbtype的10对应不是int,而是dbtype.anistring吧,那么等我回到dal中,又把它强制转回了sqldbtype,那么两次转换中,虽然dbtype中的10和sqldbtype中的10对应的不是同一个类型,但我2次转换,又吧sqldbtype原封不动的变回来了,就算sqldbtype里有个值是100的枚举,而dbtype压根没有,强制转换的时候也是100,也不会出错,等我再转一会,就不会有问题了,我的程序工作到现在,我才发现一直是错误的,虽然理解错误,但不影响其正确性,哎,看来要写一个对照表才能保证100%正确,理论和实际上
tigerleq 2009-10-10
  • 打赏
  • 举报
回复
我考,难道,你就不能通过值,找到他的枚举类型吗?
瓜一点,用swich case语句
wartim 2009-10-10
  • 打赏
  • 举报
回复
枚举是整型值类型,你只是把0换成了另一个0,无法区分
Hide1984 2009-10-10
  • 打赏
  • 举报
回复
你已经在public DbParameter MakeParam(string ParamName, DbType dbType, Int32 Size)中申明了变量DbType dbType,而且这个DbType 枚举和SqlDbType枚举是没有任何关系的,那这个dbType是Dbtype类型还是sqlDbType类型?又有什么意义呢?
uxspy 2009-10-10
  • 打赏
  • 举报
回复
咋没人啊

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧