为什么当做int变量+ int变量i'm的和时得到两个数字作为结果
本文关键字:变量 int 数字 结果 两个 为什么 | 更新日期: 2023-09-27 18:19:18
这是我的代码:
this.Invoke(new MethodInvoker(delegate {
label13.Text = e.failedUrls + doneWebPages.ToString();
}));
结果是:01,02,03,04.....09,111
当e.failedUrls现在是1,doneWebPages是22,而不是在label13中显示总和23,我看到122。
您正在将int
添加到string
1。该语言的规则将导致编译器发出指令,将2 int
转换为string
,因此您看到的是string
连接。因此
如果e.failedUrls
如你所说的是1
, doneWebPages
如你所说的是22
,那么
e.failedUrls + doneWebPages.ToString()
将导致
1.ToString() + "22"
将导致
"1" + "22"
就是"122"
,正如你所看到的。如果你想要整数运算,你需要做的是:
label13.Text = (e.failedUrls + doneWebPages).ToString();
即先加号码,然后根据结果调用ToString
。
1:我假设e.failedUrls
是int
,因为你似乎认为它是int
。显然,doneWebPages.ToString()
是string
,但我假设doneWebPages
是int
,因为你似乎也认为它是int
。
2:在String
上定义了一个带参数+(object x, string y)
的操作符+
。+
的语义为
x + y -> x != null ? (x.ToString() ?? "") + y : "" + y;
因为你在添加一个数字和一个字符串。
-
e.failedUrls
似乎是一个数字,从你的描述来看。 -
doneWebPages.ToString()
是字符串
所以,5 + "13"
等于"513"
。
要解决这个问题,从第二个操作数中删除.ToString()
调用。然后是5 + 13
,等于18
。
您正在连接字符串。首先使用Int32.Parse()
或Int32.TryParse()
转换为Int32
将两个string
s加在一起。您需要使用int.Parse
将它们转换为int
s
你的问题确实遗漏了很多信息,但让我们假设简单的:
假设failedUrls
和doneWebPages
是整数。然后表达式
label13.Text = e.failedUrls + doneWebPages.ToString();
从内到外求值。
即计算以下子表达式:
-
e.failedUrls
-> a号 -
doneWebPages
-> a号 -
doneWebPages.ToString()
->字符串,表示前面提到的数字 -
e.failedUrls + doneWebPages.ToString()
->连接一个数字和一个字符串
虽然我对c#不太熟悉,但似乎因为,当调用"+"方法时,您正在通过ToString()方法将doneWebPages转换为字符串,您正在使用"+"方法在字符串连接的上下文中,而不是加法。在给label13赋值之前,尝试将e.failedUrls和doneWebPages转换为整数。
您正在添加两个字符串而不是两个整数
+操作符对于字符串是重载的,它会导致字符串连接。
你使用了. failedurls + doneWebPages.ToString()。由于第二个参数是一个字符串,. net采用第一个参数的字符串表示形式,并将两个字符串连接起来。
所以"1" + "22" = "122"
如果要进行加法运算,请确保两个操作数都是int/number。尝试将doneWebPages转换为整数表示。
原因是你在添加两个字符串值,你必须添加两个整数值
label13.Text = int.Parse(e.failedUrls.ToString() + int.Parse( doneWebPages.ToString())
你的问题就解决了