DataRow比较无法按预期工作

时间:2009-03-05 13:17:40

标签: c# datarow

我正在尝试比较循环中的两个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
}

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

感谢
斯蒂芬

3 个答案:

答案 0 :(得分:9)

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

Here's a link to MS's discussion of Operator== and comparison.

答案 1 :(得分:7)

作为itsmatt has said,您的第一个代码段正在进行参考比较。调用ToString的另一种方法是使用Object.Equals

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

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

答案 2 :(得分:4)

==运算符(如果没有重载)与ReferenceEquals()相同 - 也就是说,它确定两个给定的object是否是相同的实例。

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