DataRow比较无法按预期工作

Gat*_*ler 3 c# datarow

我想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

its*_*att 9

这些单元格保存对象,因此您正在进行对象比较,这只是进行参考比较,这与值比较不同.它问的问题是"这两个对象真的是同一个对象吗?",基本上它们指的是同一个对象,因此是"参考比较".当您执行ToString()调用时,您正在进行字符串比较.这就是为什么它有效.

这是MS关于Operator ==和比较的讨论的链接.


Jon*_*eet 7

正如它所说,你的第一个片段正在进行参考比较.呼叫的替代方法ToString是使用Object.Equals:

if (Object.Equals(dt1.Rows[0]["Name"], dt2.Rows[b]["Name"])) {
    // stuff
}
Run Code Online (Sandbox Code Playgroud)

使用静态方法而不是实例方法的原因是为了避免空引用的问题.