繁体   English   中英

C#忽略其他if语句

[英]c# ignoring else if statement

我正在尝试制作winforms应用程序,因此当单击某些内容时,它将检查网页的响应。

我已经测试过该网页,看是否是PHP错误,但从那方面来看效果很好。

即使响应是“未分配的”,它也完全忽略了else if语句,并跳到它下面的else语句。

这是我的代码:

private void button1_Click(object sender, EventArgs e)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://fms.psrpc.co.uk/apiconfirmD.php?" + ApiKey);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        using (response)
        {
            StreamReader reader = new StreamReader(response.GetResponseStream());
            if (reader.ReadToEnd() == "Changed")
            {
                label2.Visible = false;
                button1.Enabled = false;
                button2.Enabled = true;
                button3.Enabled = true;
                button4.Enabled = true;
                button5.Enabled = true;
                button6.Enabled = true;
                button7.Enabled = true;
                button8.Enabled = true;
                timer1.Enabled = true;
            }
            else if (reader.ReadToEnd() == "Unassigned")
            {
                string message = "Error Code: B66794O37945O46791K@@Error booking on.@Please make sure you have been assigned to a vehicle.@@If this error persists please contact K.McCrudden.";
                message = message.Replace("@", "" + System.Environment.NewLine);
                string title = "Error!";

                MessageBoxButtons buttons = MessageBoxButtons.OK;
                DialogResult result = MessageBox.Show(message, title, buttons, MessageBoxIcon.Error, MessageBoxDefaultButton.Button2);
            }
            else
            {
                string message = "Error Code: B002875O46883O84655K@@Error booking on.@Please make sure you have booked a shift and have been assigned.@@If this error persists please contact K.McCrudden.";
                message = message.Replace("@", "" + System.Environment.NewLine);
                string title = "Error!";

                MessageBoxButtons buttons = MessageBoxButtons.OK;
                DialogResult result = MessageBox.Show(message, title, buttons, MessageBoxIcon.Error, MessageBoxDefaultButton.Button2);
            }
        }
    }

不,它没有被忽略。 您正在通过调用reader.ReadToEnd()来读取第一个if块中的所有数据。 这样,您的else if语句中就没有其他数据可读取; 它返回空字符串。 因此条件不匹配,并且最终的else块被执行。

修改代码,如下所示。 请注意以下代码中的临时data变量。

StreamReader reader = new StreamReader(response.GetResponseStream());
string data = reader.ReadToEnd();//Read the data in temp variable.
//Use this variable to check the conditions further.
if (data == "Changed")
{
    //Your code here
}
else if (data == "Unassigned")
{
    //Your code here
}
else
{
    //Your code here
}

您的一般逻辑有误。 输入第一个if语句时,您将使用代码reader.ReadToEnd()读取流的末尾。 在下一个语句( else )中,您将再次读取流,但是它已经被读取,因此它将返回一个空字符串,因此最后一个else语句将被有效地命中。

您也可以在MSDN上阅读有关此内容: StreamReader.ReadToEnd()方法

返回值的定义:

流的其余部分作为字符串,从当前位置到末尾。 如果当前位置在流的末尾,则返回一个空字符串(“”)。

您的代码应如下所示:

StreamReader reader = new StreamReader(response.GetResponseStream());
var result = reader.ReadToEnd();

if(result == "Changed")
{
    label2.Visible = false;
    button1.Enabled = false;
    button2.Enabled = true;
    button3.Enabled = true;
    button4.Enabled = true;
    button5.Enabled = true;
    button6.Enabled = true;
    button7.Enabled = true;
    button8.Enabled = true;
    timer1.Enabled = true;
}
else if(result == "Unassigned")
{
    string message = "Error Code: B66794O37945O46791K@@Error booking on.@Please make sure you have been assigned to a vehicle.@@If this error persists please contact K.McCrudden.";
    message = message.Replace("@", "" + System.Environment.NewLine);
    string title = "Error!";

    MessageBoxButtons buttons = MessageBoxButtons.OK;
    DialogResult result = MessageBox.Show(message, title, buttons, MessageBoxIcon.Error, MessageBoxDefaultButton.Button2);
}
else
{
    string message = "Error Code: B002875O46883O84655K@@Error booking on.@Please make sure you have booked a shift and have been assigned.@@If this error persists please contact K.McCrudden.";
    message = message.Replace("@", "" + System.Environment.NewLine);
    string title = "Error!";

    MessageBoxButtons buttons = MessageBoxButtons.OK;
    DialogResult result = MessageBox.Show(message, title, buttons, MessageBoxIcon.Error, MessageBoxDefaultButton.Button2);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM