C# Equals return true but == return false
本问题已经有最佳答案,请猛点这里访问。
以下是我的数据集中的部分数据:
看一看第16行的数据和第17行的数据(partno列),值是"cts04",但稍后进行检查时,会出现以下情况:
partno列数据类型为string,17行数据是使用以下代码手动创建的:
1 2 | DataRow newRow = ds.Tables[tableToAdd].Rows.Add(); newRow["partno"] = ds.Tables[tableToAdd].Rows[i - 1]["partno"]; |
所以,从逻辑上讲,我只是想从上面的行复制partno,但是为什么当我使用"=="操作符检查值时,它返回false?
因为您的值实际上是字符串,所以您需要使用基于字符串的比较。如果您将它们强制转换为字符串,则只能使用
1 2 3 4 5 6 | 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 |
有关详细信息,请参阅为什么使用string.equals over==?以及==和equals()之间的c差。
对于对象,相等运算符(==)执行"referenceEquals"。在简单类型(如数字和字符串)中,运算符执行值比较。
==比较数据行而不是该行的值。这两行都不同,所以结果是错误的。在第二种情况下,它比较了值,因为值相同,所以结果是真的。