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