【问题标题】:C# error with function and textboxes as a parameter [closed]函数和文本框作为参数的 C# 错误[关闭]
【发布时间】:2012-07-16 17:23:01
【问题描述】:

我在编写函数并将参数传递给它时遇到问题。

我的问题是我创建了名为mySum 的函数。我已经展示了下面的代码。

注意:我使用两个文本框从用户那里获取值,函数应该添加这两个值并在MessageBox 中显示。

void mySum(int a, int b)
{
    int ans;
    ans = a + b;
    MessageBox.Show(ans.ToString());
}

private void button1_Click(object sender, EventArgs e)
{
    //Here i want to ass two text boxes values as given below.
    mySum(txtbox1.text,txtbox2.text); //Here it shows me the error
}

【问题讨论】:

  • 您是否阅读了错误的实际内容?它应该像白天一样清晰。
  • 将 txtbox1.Text 转换为 int,因为 mySum 采用 int args
  • 更好的是,使用 System.Int32.TryParse() 来确保数据采用有效格式,并且正确处理无效格式,而不是仅仅转换为 int。

标签: c# parameters


【解决方案1】:

将文本框的值解析为整数:

mySum(int.Parse(txtbox1.text),int.Parse(txtbox2.text));

添加适当的错误处理。

【讨论】:

    【解决方案2】:
    private void button1_Click(object sender, EventArgs e)
        {
    
              mySum(Int32.Parse(txtbox1.text), Int32.Parse(txtbox2.text));          
    
        }
    

    【讨论】:

      【解决方案3】:

      问题是 thsat txtBox1.Text 不是作为 int 存储的,而是作为字符串存储的。您需要使用 System.Int32.TryParse 来安全地查看文本是否为字符串并将其转换为 int。

      private void button1_Click(object sender, EventArgs e)
      {
      
           int firstInt = -1;
           int secondInt = -1;
      
          if(!System.Int32.TryParse(txtbox1.Text, out firstInt)
          {
             MessageBox.Shw("Invalid value in Textbox 1");
             return; // Stop procesing
          }
          if(!System.Int32.TryParse(txtbox2.Text, out secondInt)
          {
             MessageBox.Show("Invalid value in Textbox 2");
             return; // Stop procesing
          }
          //Here i want to add the values from two text boxes values as given below.
           mySum(firstInt, secondInt); //Here it shows me the error . Please help me.           
       }
      

      【讨论】:

      • 不知道这算不算结对编程。
      • 一般来说,新手程序员最好先用简单的方法教,等他们了解基础后再详细阐述最佳实践。
      【解决方案4】:

      您的函数期望 integer 作为参数。但是您传递的是一个字符串( Text 属性返回字符串)。所以转换成它。

      mySum(Convert.ToInt32(txtbox1.Text),Convert.ToInt32(txtbox2.Text));
      

      您可以在转换之前检查 null 值/是否为有效数值,否则 ToInt32 函数将抛出异常。使用Int32.TryParse

      int value1=0;
      int value2=0;
      int result;
      
      if (!Int32.TryParse(txtbox1.Text, out value1))
      {   
         MessageBox.Show("Not valid number");
         return;
      }  
      if (!Int32.TryParse(txtbox2.Text, out value2))
      {   
         MessageBox.Show("Not valid number");
         return;
      }
      
      mySum(value1,value2);
      

      【讨论】:

        【解决方案5】:

        只需这样做:

        int mySum(string a, string b)
            {
               return Convert.ToInt32(a) + Convert.ToInt32(b);
            }
        

        在您的代码隐藏文件中,像这样调用上面的函数:

            MessageBox.Show(mySum(txtbox1.Text,txtbox2.Text)..ToString());
        

        【讨论】:

        • 对不起,这不会编译 :) 复制/粘贴,糟糕的 mmkay! (你实际上有 2 个错误)
        • 我已经更新了答案……现在,它应该可以工作了……
        • 糟糕,实际上并没有看到 :) 你没有修复我提到的 2 个错误。
        • 对不起....错过了检查返回类型以及 Text 属性....好的,现在我将调试我的代码....
        • 在编写上面的代码时,我没有编译代码,所以它发生了.....感谢您发现错误......
        【解决方案6】:

        您将strings 传递给一个期待ints 尝试的函数

        mySum(int.Parse(txtbox1.text),int.Parse(txtbox2.text))
        

        【讨论】:

          【解决方案7】:

          Textbox.Text 属性返回字符串。在您的函数声明中,您传递了两个整数。所以你需要将字符串转换为整数。

          【讨论】:

            【解决方案8】:

            C# 没有从 String 到 Int32 的隐式转换,因此如果您的方法采用 int 参数,则必须在传入之前将该值转换为 int。

            【讨论】:

              【解决方案9】:

              这不是一个好方法。

              我推荐这个:

              public int mySum(int a, int b)
              {
                  return a + b;
              }
              

              然后在你的事件上,执行以下代码:

              var t1 = int.Parse(txtbox1.text);
              var t2 = int.Parse(txtbox2.text);
              MessageBox.Show(mySum(t1,t2))
              

              ...请记住,如果您的文本框实际上没有保存整数值,则会出现问题。您可以查看int.TryParse() 以获得更强大的解决方案。

              【讨论】:

              • 或者你可以只使用数据绑定并完成它;p
              • @leppie:嗯。我不太了解 Windows 应用程序中的数据绑定(我主要是 ASP.NET),但我认为我更愿意将验证逻辑保留在 UI 之外。个人喜好。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-07-30
              • 2016-08-24
              • 2016-07-03
              • 2020-08-13
              • 2016-06-18
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多