【问题标题】:String is considered 'bool' after TryParse to int在 TryParse 到 int 之后,字符串被认为是“布尔”
【发布时间】:2015-05-02 10:06:36
【问题描述】:

我正在尝试将文本输入转换为 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);
}

看不出我哪里错了。

【问题讨论】:

    标签: c# type-conversion tryparse


    【解决方案1】:

    出现这种情况是因为TryParse 返回了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,因为它返回解析后的值。

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

    【讨论】:

    • 它说我可以在 7 分钟内接受 - 这个限制会消失吗?
    • 不行,达到一定声望后限制会整体消失吗? (我能否在稍后的某个时间点接受没有时间限制的答案)
    • @AB 永远不会消失 see this answer
    【解决方案2】:

    TryParse 返回布尔值,它告诉您解析是否成功。试试

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

    【讨论】:

      【解决方案3】:

      这很自然。 TryParse 返回布尔值。 out 参数是 TryParse 的结果。查看此帖子:How the int.TryParse actually works

      【讨论】:

        【解决方案4】:

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

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

        查看documentation了解详情。

        【讨论】:

          【解决方案5】:

          试试这个..

          Int1 = int.Parse(textBox1.Text);
          

          【讨论】:

            【解决方案6】:

            您应该使用TryParse 的返回值来决定解析是否成功。它返回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 调用之一的返回值为false 时,不计算乘积,并将错误消息“”添加到listBox1 而不是乘积。

            【讨论】:

              【解决方案7】:

              TryParse() 返回bool,而out 参数将已经有解析值Int1Int2 如果解析成功,你必须这样做:

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

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

              输入的字符串格式不正确

              【讨论】:

                【解决方案8】:

                TryParse 根据其成功或不成功的尝试返回真或假。如果你确定用户只输入数字,你可以使用

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

                【讨论】:

                • Parse 不是pars
                • @EhsanSajjad,是的,输入错误,tnx 注意到了我。我编辑了。
                猜你喜欢
                • 2019-03-29
                • 2016-11-21
                • 1970-01-01
                • 1970-01-01
                • 2022-07-31
                • 1970-01-01
                • 2015-02-07
                • 1970-01-01
                • 2017-02-21
                相关资源
                最近更新 更多