Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#等于返回true,但==返回false_C#_Winforms - Fatal编程技术网

C#等于返回true,但==返回false

C#等于返回true,但==返回false,c#,winforms,C#,Winforms,以下是我的数据集中的部分数据: 看看第16行的数据和第17行的数据(partno列),值是“CTS04”,但当我稍后进行检查时,会出现以下情况: partno列数据类型为字符串,17行数据是使用以下代码手动创建的: DataRow newRow = ds.Tables[tableToAdd].Rows.Add(); newRow["partno"] = ds.Tables[tableToAdd].Rows[i - 1]["partno"]; 所以,从逻辑上讲,我只是试图从上面的行复制par

以下是我的数据集中的部分数据:

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

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

DataRow newRow = ds.Tables[tableToAdd].Rows.Add();
newRow["partno"] = ds.Tables[tableToAdd].Rows[i - 1]["partno"];

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

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

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

对于对象,相等运算符(=)执行“ReferenceEquals”。在数字和字符串等简单类型中,运算符执行值比较

ds.Tables[tableToAdd].Rows[i-1][“partno”]
不返回简单值。
尝试
ds.Tables[tableToAdd].Rows[i-1][“partno”].GetType()

对于对象,相等运算符(=)执行“ReferenceEquals”。在数字和字符串等简单类型中,运算符执行值比较

ds.Tables[tableToAdd].Rows[i-1][“partno”]
不返回简单值。 尝试
ds.Tables[tableToAdd].Rows[i-1][“partno”].GetType()

返回作为
对象键入的内容。因此,当您执行
==
操作时,将使用
对象
类型的相等比较,并且只有在这两个对象之间存在引用相等时,才会使用
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
有关更多信息,请参阅和。

返回键入为
对象的内容。因此,当您执行
==
操作时,将使用
对象
类型的相等比较,并且只有在这两个对象之间存在引用相等时,才会使用
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

有关更多信息,请参见和。

尝试在两侧使用
Trim()
,请参阅@X-TECH,但问题似乎不是因为空格,正如您在我的第二个屏幕截图中所看到的,如果我将对象转换为字符串,它将返回true…您在每一个位置都在谈论第16行和第17行,但是您显示的即时窗口代码,你要查15号和16号。请您消除混淆好吗?尝试在两侧使用
Trim()
,请参见@X-TECH,但问题似乎不是因为空格,正如您在我的第二个屏幕截图中所看到的,如果我将对象转换为字符串,它将返回true…您在每一个地方都在谈论第16行和第17行,但是您显示的即时窗口代码,你要查15号和16号。请你澄清一下混乱的情况好吗?