以下是我的DataSet数据的一部分:
看一下第16行的数据和17行的数据(partno列),值是“CTS04”,但是当我稍后进行检查时,会出现以下情况:
partno列数据类型是字符串,使用以下代码手动创建了17行的数据:
file2.txt
所以,从逻辑上讲,我只是试图从上面的行复制partno,但为什么当我使用“==”运算符来检查值时,它会返回false?
答案 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)
==比较数据行而不是行的值。这两行都不同,因此结果是错误的。在第二种情况下,它比较了值,因为值相同,结果是真的。