我想DataRow
在一个循环中比较两个s.但是,以下if
声明不会返回true
:
if (dt1.Rows[0]["Name"] == dt2.Rows[b]["Name"]) { // This never executes }
但是,如果我添加.ToString()
到每个结尾DataRow
,则该if
语句返回true
:
if (dt1.Rows[0]["Name"].ToString() == dt2.Rows[b]["Name"].ToString()) { // This now executes }
"名称"列来自同一个表/列.所以问题很简单......我做错了什么?
谢谢
Stephen
这些单元格保存对象,因此您正在进行对象比较,这只是进行参考比较,这与值比较不同.它问的问题是"这两个对象真的是同一个对象吗?",基本上它们指的是同一个对象,因此是"参考比较".当您执行ToString()调用时,您正在进行字符串比较.这就是为什么它有效.
这是MS关于Operator ==和比较的讨论的链接.
正如它所说,你的第一个片段正在进行参考比较.呼叫的替代方法ToString
是使用Object.Equals
:
if (Object.Equals(dt1.Rows[0]["Name"], dt2.Rows[b]["Name"])) { // stuff }
使用静态方法而不是实例方法的原因是为了避免空引用的问题.