我正在尝试在循环中比较两个 DataRow 。但是,以下 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
}

列“名称”来自同一个表/列。所以问题很简单......我做错了什么?

由于结果 斯蒂芬

有帮助吗?

解决方案

itsmatt已经说过,您的第一个代码段是做参考比较。调用 ToString 的替代方法是使用 Object.Equals

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

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

其他提示

这些单元格保存对象,因此您正在进行对象比较,这只是进行参考比较,这与值比较不同。它问问题“这两个对象是否真的是同一个对象?”,基本上它们指的是同一个对象,因此称为“参考比较”。当您执行ToString()调用时,您正在进行字符串比较。这就是它运作的原因。

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

== 运算符,如果没有重载,则与 ReferenceEquals()相同 - 也就是说,它决定了两个给定的对象 s是相同的实例。

ToString()的调用返回 string 类的对象,该对象具有重载的 == 运算符,它进行字符串比较。

scroll top