为什么当做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变量+ int变量i'm的和时得到两个数字作为结果

您正在将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.failedUrlsint,因为你似乎认为它是int。显然,doneWebPages.ToString()string,但我假设doneWebPagesint,因为你似乎也认为它是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

你的问题确实遗漏了很多信息,但让我们假设简单的:

假设failedUrlsdoneWebPages是整数。然后表达式

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()) 

你的问题就解决了