请问,这两行的原始值为什么不一样?

sdffv3v 2012-09-14 10:36:07
把数据库中的数据填充到DataTable中,第一行和第二行的年龄列的值都是45,下面的输出也都是45

Console.WriteLine(dt.Rows[0]["年龄", DataRowVersion.Original]);
Console.WriteLine(dt.Rows[1]["年龄", DataRowVersion.Original]);


可是下面的输出会是False呢?不是都是45吗?
Console.WriteLine(dt.Rows[0]["年龄",DataRowVersion.Original] == dt.Rows[1]["年龄",DataRowVersion.Original]);
...全文
116 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
BosWorks 2012-09-14
  • 打赏
  • 举报
回复
dt.Rows[0]["年龄",DataRowVersion.Original]的返回值是一个object,这是一个装箱的值类型
调用==,相当于进行了对两个object类型的按引用比较,显然,两个装箱的值类型是两个不同的对象,按引用比较的结果当然是false

如果调用(int)dt.Rows[0]["年龄",DataRowVersion.Original] == ...
或dt.Rows[0]["年龄",DataRowVersion.Original].Equals(...)将返回true,前者重载了==运算符,后者重写了Equals方法

ViewStates 2012-09-14
  • 打赏
  • 举报
回复
因为被装箱了
sdffv3v 2012-09-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

dt.Rows[0]["年龄",DataRowVersion.Original]这返回的是object,你比较两个object比较的是引用不是值,所以不等,你要ToString()后比较
[/Quote]
object ob = dt.Rows[0]["年龄", DataRowVersion.Original];
Type tp = ob.GetType();
Console.WriteLine(tp);


可是,通过上面这种输出数据类型,两个的数据类型都是System.Int32
怎么会是比较的地址呢?
cheng2005 2012-09-14
  • 打赏
  • 举报
回复
咱俩考试都打一百分,成绩一样,难道咱俩就变成同一个人了吗?
ZWYyj 2012-09-14
  • 打赏
  • 举报
回复
要不你这样:dt.Rows[0]["年龄",DataRowVersion.Original].ToString()==dt.Rows[1]["年龄",DataRowVersion.Original].ToString
风吹腚腚凉 2012-09-14
  • 打赏
  • 举报
回复
== 比较的是内存地址不是值
比较值得话用Equals。
接下来你会有一个疑问
"1"=="1"为什么一样。
因为有一个string池的机制,导致他们的内存地址是同一个。
这个你可以去网上研究研究。
dt.Rows[0]["年龄",DataRowVersion.Original]
dt.Rows[1]["年龄",DataRowVersion.Original]
的内存地址不是同一个。
ZWYyj 2012-09-14
  • 打赏
  • 举报
回复
不会吧?既然相同应该是True,加断点调试一下,看看各项对应的值。
bdmh 2012-09-14
  • 打赏
  • 举报
回复
dt.Rows[0]["年龄",DataRowVersion.Original]这返回的是object,你比较两个object比较的是引用不是值,所以不等,你要ToString()后比较
qqtt789632147 2012-09-14
  • 打赏
  • 举报
回复
100分……
Console.WriteLine输出值是一样,因为执行了对象的toString()方法,因此不代表那两个对象就是恒等的

分别查看两个数据的类型就懂了,自己定义两个变量来看,debug时候监视变量也行
cheng2005 2012-09-14
  • 打赏
  • 举报
回复
值和对象不是一个概念

111,097

社区成员

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

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

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