Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在计算int变量的和时+;int变量i';结果我得到了两个数字?_C# - Fatal编程技术网

C# 为什么在计算int变量的和时+;int变量i';结果我得到了两个数字?

C# 为什么在计算int变量的和时+;int变量i';结果我得到了两个数字?,c#,C#,这是我的代码: this.Invoke(new MethodInvoker(delegate { label13.Text = e.failedUrls + doneWebPages.ToString(); })); 结果是:01,02,03,04….09111 例如,当e.failedUrls现在为1,而doneWebPages为22时,则在label13中显示我看到的和23 怎么了?因为您正在添加一个数字和一个字符串 从你的描述来看,e.failedUrls似乎是一个数字 don

这是我的代码:

this.Invoke(new MethodInvoker(delegate {
    label13.Text = e.failedUrls + doneWebPages.ToString();
}));
结果是:01,02,03,04….09111

例如,当e.failedUrls现在为1,而doneWebPages为22时,则在label13中显示我看到的和23


怎么了?

因为您正在添加一个数字和一个字符串

  • 从你的描述来看,
    e.failedUrls
    似乎是一个数字
  • donewebpage.ToString()
    是一个字符串
所以,
5+“13”
等于
“513”


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

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

将两个
字符串添加到一起。您需要使用
int.Parse
将它们强制转换为
int
s。

您正在向
字符串添加
int
。该语言的规则将导致编译器发出指令,将
int
转换为
字符串
,因此您将看到
字符串
串联。因此

如果
e.failedUrls
如您所说是
1
,而
donewebpage
如您所说是
22
,则

e.failedUrls + doneWebPages.ToString()
将导致

1.ToString() + "22"
"1" + "22"
这将导致

1.ToString() + "22"
"1" + "22"
正如您所看到的,这是
“122”
。如果需要整数算术,则需要:

label13.Text = (e.failedUrls + doneWebPages).ToString();
也就是说,首先添加数字,然后调用
ToString
,查看结果

1:我假设
e.failedUrls
int
,因为您似乎认为它是
int
。显然,
doneWebPages.ToString()
是一个
字符串
,但我假设
doneWebPages
是一个
int
,因为您似乎也认为它是一个
int

2:在
字符串上定义了一个运算符
+
,参数为
+(对象x,字符串y)
+
的语义是

x + y -> x != null ? (x.ToString() ?? "") + y : "" + y;

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

假设
failedUrls
donewebpage
是整数。然后是表情

label13.Text = e.failedUrls + doneWebPages.ToString();
从内到外进行评估

也就是说,将计算以下子表达式:

  • e.failedUrls
    ->一个数字
  • donewebpage
    ->一个数字
  • donewebpage.ToString()
    ->表示上述数字的字符串
  • e.failedUrls+donewebpage.ToString()
    ->连接数字和字符串

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

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

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

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


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

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

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

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

这样可以解决您的问题

它们都是字符串。你认为把两个字符串加在一起会发生什么?