C#Equals返回true但==返回false

时间:2015-08-21 11:39:47

标签: c# winforms

以下是我的DataSet数据的一部分:

enter image description here

看一下第16行的数据和17行的数据(partno列),值是“CTS04”,但是当我稍后进行检查时,会出现以下情况:

enter image description here

partno列数据类型是字符串,使用以下代码手动创建了17行的数据:

file2.txt

所以,从逻辑上讲,我只是试图从上面的行复制partno,但为什么当我使用“==”运算符来检查值时,它会返回false?

3 个答案:

答案 0 :(得分:3)

DataRow[index]会返回键入object的内容。因此,当您执行<object1> == <object2>时,将使用object类型的相等比较,如果这两个对象之间存在引用相等,则只会true

由于您的值实际上是字符串,因此您希望使用基于字符串的比较。如果将它们转换为字符串,则只能使用==执行此操作。或者使用由字符串类型重载的.Equals()来进行比较:

object a = "foo";
object b = new StringBuilder("foo").ToString(); // this is to make sure that we get a new string object instead of the constant "foo" that is created at compile-time

Console.WriteLine(a == b); // false
Console.WriteLine((string)a == (string)b); // true
Console.WriteLine(a.Equals(b)); // true

有关详细信息,请参阅Why would you use String.Equals over ==?C# difference between == and Equals()

答案 1 :(得分:2)

对于对象,等于运算符(==)执行&#34; ReferenceEquals&#34;。在诸如numers和字符串之类的简单类型中,运算符执行值比较。

ds.Tables[tableToAdd].Rows[i - 1]["partno"]不会返回简单值。 试试ds.Tables[tableToAdd].Rows[i - 1]["partno"].GetType();

答案 2 :(得分:0)

==比较数据行而不是行的值。这两行都不同,因此结果是错误的。在第二种情况下,它比较了值,因为值相同,结果是真的。