【问题标题】:Testing equality of DataColumn values in C#在 C# 中测试 DataColumn 值的相等性
【发布时间】:2026-02-20 03:15:01
【问题描述】:

当列类型未知时,我编写了一些代码来测试 DataTables 中列值之间的相等性。

像这样直接测试:

row["Foo"] == row["Bar"]

总是导致 false,大概是因为对象的 Equals 实现使用了 ReferenceEquals。

所以我采取了:

row["Foo"].ToString() == row["Bar"].ToString()

这行得通(至少对于我目前遇到的情况而言),但它似乎有点,嗯,manky。

谁能想到我不应该这样做的原因,或者提出更好的方法?请记住,我在设计时不知道列类型,因此不能选择强制转换。

谢谢

大卫

【问题讨论】:

  • 所以您正在寻找一种方法来可靠地比较可能属于不同类型的两个对象的相等性?
  • 你能解释一下吗,为什么编码时不知道类型?
  • 贾斯汀 - 抱歉我没有解释。它们将属于同一类型,但在设计时类型未知。
  • Nazgul - 此代码是在 c# 中模拟连接的通用函数的一部分。相等性测试基本上是 ON 子句,但连接可以在字符串、guid、int 等之间。函数事先不知道。

标签: c# equality datacolumn


【解决方案1】:

试试row["Foo"].Equals(row["bar"])

当您使用 == 比较对象并且没有预定义或用户定义的 == 运算符时,C# 将使用引用相等来比较它们。如果要调用 Equals 方法,则需要将其写为方法调用。

【讨论】:

    【解决方案2】:

    row["Foo"].Equals(row["Bar"])?

    【讨论】:

    • 您是在比较两个对象是否具有相同的引用,对吧?
    • 这与 Quartermeister 的答案相同(正确)。我将他标记为正确,因为我不知道哪个是第一个,而且它在页面的上方。对不起!
    • @David 实际上我是第一个,但没关系 :) 我不太确定额外的 15 分
    【解决方案3】:

    如果是字符串,为什么不使用 Equals。

    row["foo"].ToString().Equals(row["Bar"].ToString());
    

    【讨论】: