3

我有这段代码,它仅在所有文本框都包含值时才有效。但是如果文本框为空,我会收到错误消息。

Int32 Total = Int32.Parse((txtChild1.Text))
            + Int32.Parse(txtChild2.Text)
            + Int32.Parse(txtChild3.Text)
            + Int32.Parse(txtWife1.Text)
            + Int32.Parse(txtWife2.Text)
            + Int32.Parse(txtWife3.Text);

我知道它必须是像 IsNull 这样的函数,但对于整数值。有谁知道它是什么?

4

5 回答 5

8

您正在寻找Int32.TryParse

Int32 val;
if (Int32.TryParse(txtChild1.Text, out val)){
  // val is a valid integer.
}

您调用每个.Text属性,然后将它们加在一起。您还可以进行扩展以使其更容易(如果您选择):

public static class NumericParsingExtender
{
    public static Int32 ToInt32(this String input, Int32 defaultValue = 0)
    {
      if (String.IsNullOrEmpty(input)) return defaultValue;
      Int32 val;
      return Int32.TryParse(input, out val) ? val : defaultValue;
    }
}

然后,在实践中:

Int32 total = txtChild1.Text.ToInt32() + txtChild2.Text.ToInt32()
            + txtChild3.Text.ToInt32() + /* ... */;

当然,还有一个例子

于 2013-01-22T13:42:51.407 回答
2

您应该TextBox在解析之前检查它是否不为空,或者您可以使用TryParse

http://msdn.microsoft.com/en-us/library/f02979c7.aspx

于 2013-01-22T13:43:29.267 回答
2

您可以使用Int32.TryParse

Int32 int1 = 0;
Int32.TryParse(txtChild1.Text, out int1);
//.... more int declarations
Int32 total = int1 + int2 + int3; //etc. etc.

TryParse将尝试解析文本,如果失败,它将变量设置为 0。

您还可以内联一些逻辑(尽管这会使代码非常长且混乱):

Int32 Total = (txtChild1.Text.Length == 0 ? 0 : Int32.TryParse(txtChild1.Text)) + (txtChild2.Text.Length == 0 ? 0 : Int32.TryParse(txtChild2.Text)); //etc. etc.

Int32.TryParse参考:http: //msdn.microsoft.com/en-us/library/f02979c7.aspx

Shorthand if reference: http://msdn.microsoft.com/en-gb/library/ty67wk28(v=vs.110).aspx

于 2013-01-22T13:47:58.683 回答
1

您无法解析空字符串“”。在解析之前检查该框是否包含任何内容。

Textbox.text != ""

其他答案更快使用 tryparse 实际上是最好的,因为它用更少的代码行做同样的事情!

于 2013-01-22T13:43:53.907 回答
1

Int32是一个值类型。不可能null。或者当然有一个nullable types但是嘿..

Int32.Tryparse()用方法试试。

将数字的字符串表示形式转换为其等效的 32 位有符号整数。返回值指示操作是否成功。

Int32.TryParse(txtChild1.Text, out val)

boolean true如果 s 转换成功,则返回;否则,false

于 2013-01-22T13:44:01.250 回答