高分请求详解装箱拆箱问题!!!!!

zhenwang 2004-06-23 11:39:14
先看如下代码:
DataTable dt = GetDataTable() //这里获取数据

foreach(DataRow row in dt.Rows)
{
int a = (int)row["columnName"];
.....
}

大家看这里的转换(int)row["columnName"]为什么不行?总是抛出异常说:“无效的类型转换”,但是我用int.Parse(row["columnName"].ToString())就行。

为什么?这里算不算一个拆箱问题?
请高手给出详解!万分感谢!
...全文
82 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhenwang 2004-06-28
  • 打赏
  • 举报
回复
谢谢大家的指点!上周论坛停了,没有来得及给分,这里接了。
lishunhu253 2004-06-23
  • 打赏
  • 举报
回复
看看这个例子,90%用控件实现的,控件如果有需要,可以提供下载
www.tng.com.cn
savak88 2004-06-23
  • 打赏
  • 举报
回复
我的意思是说 你的 row["columnName"] 返回值 不是一个支持 BOXING UNBOXING的值
因为BOXING 和 UNBOXING 除了派生和基类 之外有一些限制
比如 DataRow 本身的数据结构无法支持 BOXING 和 UNBOXING 必须 用TOSTRING 后 取得的是结构的某一部分 支持BOXING 和 UNBOXING

支持BOXING 和 UNBOXING 的数据节构 见生成方式

zhenwang 2004-06-23
  • 打赏
  • 举报
回复
"基类无法实现 BOXING UNBOXING"什么意思?什么基类?DataTable?
savak88 2004-06-23
  • 打赏
  • 举报
回复
数据库读出来的统一是OBJECT类型
有可能基类无法实现 BOXING UNBOXING

TOSTRING() 后 可以
zhenwang 2004-06-23
  • 打赏
  • 举报
回复
对,columnName在数据库中的字段类型就是int型的。
zhenwang 2004-06-23
  • 打赏
  • 举报
回复
你觉得row["columnName"]算不算是一个引用?
贝贝壳壳 2004-06-23
  • 打赏
  • 举报
回复
不算吧,你的columnName在数据库中的字段类型是int吗?
封进去的不是int当然无法用拆箱了。
把123和"123"封进去去后,ToString()都是一样的
renrenqq 2004-06-23
  • 打赏
  • 举报
回复
只有被装箱的对象才能被拆箱

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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