String 在 TryParse to int 之后被认为是 'bool'

String is considered 'bool' after TryParse to int

我正在尝试将文本输入转换为可以相乘并显示乘积的 int,但是每当我尝试将文本框内容解析为 int 时,我都会得到 "cannot convert bool to int" 错误信息。代码如下:

private void button2_Click_1(object sender, EventArgs e)
{
    int Int1;
    int Int2;
    int Product;
    string Text1;
    string Text2;
    Text2 = textBox2.Text;
    Text1 = textBox1.Text;
    Int1 = int.TryParse(Text1, out Int1);
    Int2 = int.TryParse(Text2, out Int2);
    Product = Int1 * Int2;
    listBox1.Items.Add(textBox1.Text);
    listBox1.Items.Add(textBox2.Text);
    listBox1.Items.Add(Product);
}

没看出我错在哪里。

这是自然的。 TryParse returns 布尔值。 out参数是TryParse的结果。检查此 post:How the int.TryParse actually works

TryParse returns 布尔值,告诉你解析是否成功。尝试

int.TryParse(Text1, out Int1);
int.TryParse(Text2, out Int2);

发生这种情况是因为TryParse returns一个bool结果在参数中out,要解决你可以去掉属性。

int.TryParse(Text1, out Int1);
int.TryParse(Text2, out Int2);
Product = Int1 * Int2;

如果您使用 TryParse,您应该使用 if 来检查是否一切顺利。

if(int.TryParse(Text1, out Int1) &&  int.TryParse(Text2, out Int2))
{        
    Product = Int1 * Int2;
    listBox1.Items.Add(textBox1.Text);
    listBox1.Items.Add(textBox2.Text);
    listBox1.Items.Add(Product);
}

如果您不需要此行为,您应该考虑使用 Parse,因为它 returns 已解析的值。

Int1 = int.Parse(Text1);
Int2 = int.Parse(Text2);
Product = Int1 * Int2;

TryParse returns true 或 false 基于其成功或不成功的尝试。如果您确定用户只输入数字,您可以使用

Int1=int.Parse(textBox1.Text)
Int2=int.Parse( textBox2.Text)

TryParse() returns boolout 参数已经解析了值 Int1Int2 如果解析成功你有这样做:

if(!int.TryParse(Text1, out Int1))
{
// show validation message
return;
}
if(!int.TryParse(Text2, out Int2))
{
// value not valid int
return;
}

TryParse() 当我们想要控制程序流时使用,你必须使用 if 块来处理它,否则在无效输入时你的程序将抛出异​​常

Input string was not in a correct format

您的代码正在将 int.TryParse 的结果分配给您的 int。它不能,因为 return 值是一个布尔值,指示解析是否有效。

Int1 = int.TryParse(Text1, out Int1);

查看 documentation 了解详情。

试试这个..

Int1 = int.Parse(textBox1.Text);

您应该使用 TryParse 的 return 值来决定解析是否成功。它 returns bool 表示文本已转换为 int,因此您应该更改代码如下:

private void button2_Click_1(object sender, EventArgs e) {
    int Int1;
    int Int2;
    int Product;
    string Text1;
    string Text2;
    Text2 = textBox2.Text;
    Text1 = textBox1.Text;
    listBox1.Items.Add(textBox1.Text);
    listBox1.Items.Add(textBox2.Text);
    if( int.TryParse(Text1, out Int1) && int.TryParse(Text2, out Int2)) {
        Product = Int1 * Int2;
        listBox1.Items.Add(Product);
    } else {
        listBox1.Items.Add("<incorrect input>");
    }
}

TryParse 调用之一的 return 值为 false 时,不会计算乘积,而是将错误消息“”添加到 listBox1产品。