我的代码中有一些错误,它只会在语句中首先读取,而如果不是,则只读取其他内容?

时间:2013-03-14 02:30:30

标签: c# if-statement

这是C#程序我在这行代码中遇到了问题:

我输入的数字大于或等于400 = 我输入的数字少于或等于500 = 我输入400到500之间的数字,前面是401到499 = 我清空输入= erorr 我输入letters = erorr

请注意,我运行的代码只会分别接受整数运行 以及不接受空输入的代码也会运行

你认为错在哪里?

        int parsedValue;
        if (int.Parse(txtVacate.Text) <= 400 || int.Parse(txtVacate.Text) >= 500)
            MessageBox.Show("Romms provided is not vacant or does not exist at all.");

        else if (txtVacate.Text == " ")
            MessageBox.Show("You provide empty");

        else if (!int.TryParse(txtVacate.Text, out parsedValue))
            MessageBox.Show("Please provide right info");
        else
        {
            MySqlConnection connection = null;
            string hostname = "localhost";
            string database = "aparece_hoteldb";
            string username = "root";
            string password = "";
            connection = new MySqlConnection("host=" + hostname +
                                            ";database=" + database +
                                            ";username=" + username +
                                            ";password=" + password + ";");


            string table = "reservations";
            string query = "DELETE FROM reservations WHERE RoomNumber = " + txtVacate.Text;
            connection.Open();
            MySqlDataAdapter da_res = null;
            DataSet ds_res = null;
            ds_res = new DataSet();
            da_res = new MySqlDataAdapter(query, connection);
            da_res.Fill(ds_res, table);
            MessageBox.Show("Room" + " " + txtVacate.Text + " " + "is now Vacant please reload!");
            dataGridView2.DataSource = ds_res.Tables[table];
            this.Close();

3 个答案:

答案 0 :(得分:3)

我担心你的逻辑错了。如果txtVacate.Text不包含整数,则代码会爆炸。这是评估不同条件的正确顺序。

int parsedValue = 0;
bool isValid = int.TryParse(txtVacate.Text, out parsedValue));
if (txtVacate.Text == " ") // Better: if (txtVacate.Text.Trim() == string.Empty)
{
    MessageBox.Show("You provide empty");
}
else if (!isValid)
{
    MessageBox.Show("Please provide right info");
}
else if (parsedValue <= 400 || parsedValue >= 500)
{
    MessageBox.Show("Romms provided is not vacant or does not exist at all.");   
}
else
{
    ...
}

答案 1 :(得分:1)

您的第一个if语句使用

int.Parse(txtVacate.Text)

对于空值或非数字(文本)值,这将抛出FormatException,因此永远不会评估“else if”情况。

您应该在第一个'if'中使用TryParse而不是Parse,或者捕获FormatException并相应地处理它。

答案 2 :(得分:1)

您可以简化这几步。

首先,检查以确保输入不为空,空格或空。

如果有值,请解析它以确保它是一个数值。

if (!string.IsNullOrWhiteSpace(txtVacate.Text))
{
    in parsedValue = 0;
    bool isValid = int.TryParse(txtVacate.Text, out parsedValue));

    if (isValid) 
    {
        if (parsedValue <= 400 || parsedValue >= 500)
            MessageBox.Show("Romms provided is not vacant or does not exist at all.");
        else 
        {
            // main stuff here
        }
    }
    else 
    {
        MessageBox.Show("Please provide right info");
    }
else
{
    MessageBox.Show("You provide empty");
}

虽然很复杂,但应妥善处理所有用例