用于测试用户输入是整数还是小数的条件语句

时间:2018-01-24 18:13:25

标签: c# asp.net

我有一个确定矩形区域的应用程序。用户通过两个文本字段输入宽度和长度,并通过按钮单击显示结果。我希望用户能够输入十进制或整数值。

前端

<div>
         Enter Value 1: <asp:TextBox ID="length_txt" runat="server"></asp:TextBox><br />
         Enter Value 2: <asp:TextBox ID="width_txt" runat="server"></asp:TextBox><br />
         <asp:Button ID="button1" runat="server" Text="submit" onclick="button1_Click" /><br />
         <asp:Label ID="area_lbl" runat="server"></asp:Label>
        <br />
    </div>

后端

protected void button1_Click(object sender, EventArgs e)
    {
        //area_lbl.Text = Convert.ToString(Convert.ToInt32(length_txt.Text) * Convert.ToInt32(width_txt.Text));
        area_lbl.Text = Convert.ToString(Convert.ToDecimal(length_txt.Text) * Convert.ToDecimal(width_txt.Text));
    }

...我的问题是,如何创建一个if语句来测试输入框是否有整数或十进制值?

1 个答案:

答案 0 :(得分:2)

从未在用户输入上使用Convert.To<SomePrimitiveTypeHere> 如果输入无法转换,您将获得例外 .Net框架中的每个基本类型都有TryParse方法 - 如果成功转换,它将返回true,否则返回false。

那么,你的代码看起来应该是这样的:

protected void button1_Click(object sender, EventArgs e)
{
    int intLength, intWidth;
    Decimal decimalLength , decimalWidth;
    if(int.TryParse(length_txt.Text, out intLength) && int.TryParse(width_txt.Text, out intWidth))
    {
        area_lbl.Text = (intLength * intWidth).ToString();
    }
    else if(Decimal.TryParse(length_txt.Text, out decimalLength) && Decimal.TryParse(width_txt.Text, out decimalWidth))
    {
        area_lbl.Text = (decimalLength * decimalWidth).ToString();
    }
    else
    {
        area_lbl.Text = "Invalid input!";
    }
}

然而,正如NineBerry在他的comment中写道的那样,每个整数值都可以表示为十进制,你可以忽略第一个条件并简单地写一下:

    if(Decimal.TryParse(length_txt.Text, out decimalLength) && Decimal.TryParse(width_txt.Text, out decimalWidth))
    {
        area_lbl.Text = (decimalLength * decimalWidth).ToString();
    }
    else
    {
        area_lbl.Text = "Invalid input!";
    }