这是我的代码:
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。
有什么问题?
答案 0 :(得分:6)
您正在向int
1 添加string
。语言规则将使编译器发出指令以将{sup> 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;
答案 1 :(得分:2)
因为您要添加数字和字符串。
e.failedUrls
似乎是一个数字。doneWebPages.ToString()
是一个字符串。因此,5 + "13"
等于"513"
。
要解决此问题,请从第二个操作数中删除.ToString()
调用。然后你会得到5 + 13
之类的内容,等于18
。
答案 2 :(得分:1)
你正在连接字符串。首先使用Int32.Parse()
或Int32.TryParse()
答案 3 :(得分:1)
您正在将两个string
添加到一起。您需要使用int.Parse
将其转换为int
s。
答案 4 :(得分:1)
您的问题确实缺少一些信息,但让我们假设直截了当:
假设failedUrls
和doneWebPages
是整数。然后是表达式
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())
这种方式可以解决您的问题