0

这是我的代码:

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。

怎么了 ?

4

9 回答 9

6

您正在将 1 添加intstring1中。该语言的规则将导致编译器发出将2转换为inta 的指令string,因此您会看到string连接。因此

如果e.failedUrls1,如你所说,并且doneWebPages22,也如你所说,那么

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;
于 2013-06-21T14:01:16.857 回答
2

因为您要添加一个数字和一个字符串。

  • e.failedUrls从您的描述来看,似乎是一个数字。
  • doneWebPages.ToString()是一个字符串。

所以,5 + "13"等于"513"

要解决此问题,.ToString()请从第二个操作数中删除调用。然后你会有类似的东西5 + 13,它等于18

于 2013-06-21T14:00:34.557 回答
1

虽然我对 C# 不太熟悉,但似乎因为在调用“+”方法时,您通过 ToString() 方法将 doneWebPages 转换为字符串,因此您在字符串连接的上下文中使用“+”方法与加法相反。在将值分配给 label13 之前,尝试将 e.failedUrls 和 doneWebPages 转换为整数。

于 2013-06-21T14:06:43.297 回答
1

你正在连接字符串。Int32.Parse()首先使用, 或转换为 Int32Int32.TryParse()

于 2013-06-21T14:00:36.420 回答
1

您将两个strings 加在一起。您需要使用int.Parse将它们转换为ints。

于 2013-06-21T14:00:54.640 回答
1

可以肯定的是,您的问题中缺少相当多的信息,但让我们假设简单:

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

label13.Text = e.failedUrls + doneWebPages.ToString();

由内而外进行评估。

也就是说,将评估以下子表达式:

  • e.failedUrls-> 一个数字
  • doneWebPages-> 一个数字
  • doneWebPages.ToString()-> 一个字符串,代表上述数字
  • e.failedUrls + doneWebPages.ToString()-> 连接一个数字和一个字符串
于 2013-06-21T14:01:32.023 回答
0

您要添加两个字符串而不是两个整数

于 2013-06-21T14:02:23.037 回答
0

+ 运算符对字符串重载,它会导致字符串连接。

您使用了 e.failedUrls + doneWebPages.ToString()。由于第二个参数是一个字符串,.NET 采用第一个参数的字符串表示并将字符串连接起来。

所以“1”+“22”=“122”。

如果要加法,请确保两个操作数都是 int / numbers。尝试将 doneWebPages 转换为整数表示。

于 2013-06-21T14:02:51.617 回答
0

原因是您要添加两个字符串值,而必须添加两个整数值

label13.Text = int.Parse(e.failedUrls.ToString() + int.Parse( doneWebPages.ToString()) 

这种方式将解决您的问题

于 2013-06-21T14:15:56.607 回答