这是我的代码:
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。
怎么了 ?
这是我的代码:
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。
怎么了 ?
您正在将 1 添加int
到string
1中。该语言的规则将导致编译器发出将2转换为int
a 的指令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
。
虽然我对 C# 不太熟悉,但似乎因为在调用“+”方法时,您通过 ToString() 方法将 doneWebPages 转换为字符串,因此您在字符串连接的上下文中使用“+”方法与加法相反。在将值分配给 label13 之前,尝试将 e.failedUrls 和 doneWebPages 转换为整数。
你正在连接字符串。Int32.Parse()
首先使用, 或转换为 Int32Int32.TryParse()
您将两个string
s 加在一起。您需要使用int.Parse
将它们转换为int
s。
可以肯定的是,您的问题中缺少相当多的信息,但让我们假设简单:
假设failedUrls
和doneWebPages
是整数。然后表达式
label13.Text = e.failedUrls + doneWebPages.ToString();
由内而外进行评估。
也就是说,将评估以下子表达式:
e.failedUrls
-> 一个数字doneWebPages
-> 一个数字doneWebPages.ToString()
-> 一个字符串,代表上述数字e.failedUrls + doneWebPages.ToString()
-> 连接一个数字和一个字符串您要添加两个字符串而不是两个整数
+ 运算符对字符串重载,它会导致字符串连接。
您使用了 e.failedUrls + doneWebPages.ToString()。由于第二个参数是一个字符串,.NET 采用第一个参数的字符串表示并将字符串连接起来。
所以“1”+“22”=“122”。
如果要加法,请确保两个操作数都是 int / numbers。尝试将 doneWebPages 转换为整数表示。
原因是您要添加两个字符串值,而必须添加两个整数值
label13.Text = int.Parse(e.failedUrls.ToString() + int.Parse( doneWebPages.ToString())
这种方式将解决您的问题