代码之家  ›  专栏  ›  技术社区  ›  GateKiller

数据行比较未按预期工作

  •  3
  • GateKiller  · 技术社区  · 15 年前

    我想比较两个 DataRow S在一个循环中。但是,以下内容 if 语句不返回 true :

    if (dt1.Rows[0]["Name"] == dt2.Rows[b]["Name"]) {
        // This never executes
    }
    

    但是,如果我加上 .ToString() 到每一个结束 数据行 , the 如果 语句返回 :

    if (dt1.Rows[0]["Name"].ToString() == dt2.Rows[b]["Name"].ToString()) {
        // This now executes
    }
    

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

    谢谢
    史蒂芬

    3 回复  |  直到 15 年前
        1
  •  7
  •   Community Grant Miller    7 年前

    AS itsmatt has said ,您的第一个代码段正在进行引用比较。呼叫的另一种选择 ToString 是使用 Object.Equals :

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

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

        2
  •  9
  •   itsmatt    15 年前

    这些单元格保存对象,所以您要进行对象比较,它只进行引用比较,这与值比较不同。它问“这两个物体真的是同一个物体吗?”它们本质上是指同一个对象,因此是“引用比较”。当您执行toString()调用时,您将进行字符串比较。这就是它工作的原因。

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

        3
  •  4
  •   Anton Gogolev    15 年前

    这个 == 如果不重载,则运算符与 ReferenceEquals() --也就是说,它决定了 object S是相同的实例。

    呼唤 ToString() 返回的对象 string 类,它已重载 = 运算符,用于进行字符串比较。