坚持解析

时间:2011-08-10 02:18:58

标签: c# .net winforms

使用VS2010 Express,C#及其WinForms应用程序。

这里我有三个文本框(aTextBox,bTextBox,cTextBox),Inputs是字符串,然后使用int.Parse(aTextBox.Text)转换为整数。

然后是一个Button(calcBtn)方法,它将计算费用,然后在一些数学后将结果显示到Result groupBox上的特定TextBox,它再次包含结果的文本框...

问题是由我解析的方式或它执行的顺序引起的。如果填写了任何文本框,则应显示结果,而不是格式异常。在这里我卡住了,因为在calcBtn中我正在解析所有文本框,如果其中一个是空的,那么就会发生异常。编译器是我想尝试解析空文本框中的空字符串,我不希望它。

如果你明白我的意思,有什么建议吗? :)

这是GUI的样子 enter image description here

3 个答案:

答案 0 :(得分:3)

您可以使用扩展方法...

1)方法

public static class TE
{
    public static int StringToInt(this string x)
    {
        int result;
        return int.TryParse(x, out result) ? result : 0;
    }
}

2)使用

 System.Windows.Forms.TextBox t = new System.Windows.Forms.TextBox();
 int x = t.Text.StringToInt();

答案 1 :(得分:2)

Int32.Parse方法不接受格式错误的字符串,这包括空字符串。我有两个建议。

您可以先检查字符串是否为空/空格,然后返回0或其他一些默认值:

private static int ParseInteger(string str)
{
    if (str == null || str.Trim() == "")
        return 0;

    // On .NET 4 you could use this instead.  Prior .NET versions do not
    // have the IsNullOrWhiteSpace method.
    //
    // if (String.IsNullOrWhiteSpace(str))
    //    return 0;

    return Int32.Parse(str);
}

或者您可以简单地忽略所有解析错误,将其视为0.这会将"""123abc""foobar"之类的内容视为零。

private static int ParseInteger(string str)
{
    int value;
    if (Int32.TryParse(str, out value))
        return value;

    return 0;
}

您采取的方法取决于您的应用程序的特定需求。

答案 2 :(得分:0)

您可以这样做:

private static int ParseInteger(string str)
{
    int value;
    Int32.TryParse(str, out value);
    return value;
}

没有任何if,因为如果失败则将TryParse设置为0