为什么在对int变量+ int变量求和时,我得到两个数字作为结果?

时间:2013-06-21 13:58:24

标签: c#

这是我的代码:

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。

有什么问题?

9 个答案:

答案 0 :(得分:6)

您正在向int 1 添加string。语言规则将使编译器发出指令以将{sup> 2 int转换为string,从而看到string串联。因此

如果e.failedUrls1,正如您所说,doneWebPages22,正如您所说,那么

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;

答案 1 :(得分:2)

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

    从你的描述判断,
  • e.failedUrls似乎是一个数字。
  • doneWebPages.ToString()是一个字符串。

因此,5 + "13"等于"513"

要解决此问题,请从第二个操作数中删除.ToString()调用。然后你会得到5 + 13之类的内容,等于18

答案 2 :(得分:1)

你正在连接字符串。首先使用Int32.Parse()Int32.TryParse()

转换为Int32

答案 3 :(得分:1)

您正在将两个string添加到一起。您需要使用int.Parse将其转换为int s。

答案 4 :(得分:1)

您的问题确实缺少一些信息,但让我们假设直截了当:

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

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

从内到外进行评估。

即,评估以下子表达式:

  • e.failedUrls - >一个数字
  • doneWebPages - >一个数字
  • doneWebPages.ToString() - >一个字符串,代表上述数字
  • e.failedUrls + doneWebPages.ToString() - >连接数字和字符串

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

+运算符因字符串而重载,导致字符串连接。

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

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

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

答案 8 :(得分:0)

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

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

这种方式可以解决您的问题