在if树中添加一个消息框让我无法访问代码警告

时间:2014-11-02 18:19:44

标签: c# messagebox

我有这个方法(下面)测试各种无效数据形式的几个条件。

如果方法找到无效数据,则返回false。逻辑有效。问题是我想特别通知用户这个问题。

我尝试在return语句之前添加一条消息,但是visual studio警告我在那之后代码无法访问。这是正常的,还是我做错了什么?

我的方法(并且已尝试消息框已被注释掉)

private Boolean isValidData()
    {
        if (!isPresent(txt_ArrivalDate, "Arrival Date"))
            //MessageBox.Show("You must enter a value for this field,"Data Error");
            return false;
        if (!isPresent(txt_DepartDate, "Departure Date"))
            return false;
        if (!isValidDate(txt_ArrivalDate, "Arrival Date"))
            return false;
        if (!isValidDate(txt_DepartDate, "Departure Date"))
            return false;
        if (!isOnOrAfterToday(txt_ArrivalDate, "Arrival Date"))
            return false;
        if (!isOnOrAfterToday(txt_DepartDate, "Departure Date"))
            return false;
        if (!isAfterArrivalDate(txt_ArrivalDate, "Arrival Date", txt_DepartDate, "Departure Date"))
            return false;

        return true;


    }

注意,验证方法会传递名称,因为我更愿意在方法中显示消息框,而不是在此方法中。

例如:

        private Boolean isPresent(TextBox textbox, string name)
    {
        if (textbox.Text == "" || textbox.Text == null)
            MessageBox.Show("Data must be entered for" + name, "Data Error");
            return false;
        return true;
    }

然而,在return true语句中,我得到了代码无法访问的警告。

2 个答案:

答案 0 :(得分:0)

您正在处理两个非常不同的代码位,具体取决于这是否是注释。

在这一个

if (!isPresent(txt_ArrivalDate, "Arrival Date"))
        //MessageBox.Show("You must enter a value for this field,"Data Error");
        return false;

return false;取决于if匹配。

在这一个

if (!isPresent(txt_ArrivalDate, "Arrival Date"))
        MessageBox.Show("You must enter a value for (this field)","Data Error");
        return false;

消息框已经过条件化,并且总是会发生返回。正如编译器告诉你的那样,这使得它下面的一切都无法到达。

这不是python,缩进对行为没有影响。

你可能正在寻找

if (!isPresent(txt_ArrivalDate, "Arrival Date"))
{
        MessageBox.Show("You must enter a value for (this field)","Data Error");
        return false;
}

现在两者消息框,return false;if控制。

答案 1 :(得分:0)

它无法访问,因为你忘了用花括号包围这两行。目前你已经拥有了这个:

if (!isPresent(txt_ArrivalDate, "Arrival Date"))
    MessageBox.Show("You must enter a value for this field,"Data Error");

return false;

无论第一个return false语句是否返回iftruefalse语句都会运行,因此该点之后的任何内容都不会运行。

你想要这个:

if (!isPresent(txt_ArrivalDate, "Arrival Date"))
{
    MessageBox.Show("You must enter a value for this field,"Data Error");
    return false;
}

更好的是,你可以考虑建立你的错误信息,这样他们就找不到一个问题,然后下次找出另一个问题,等等。

这样的事情:

private bool IsValidData()
{
    var errorMessages = new List<string>();

    if (!isPresent(txt_ArrivalDate, "Arrival Date"))
        errorMessages.Add("You must enter a value for this field.");
    if (!isPresent(txt_DepartDate, "Departure Date"))
        errorMessages.Add("Another message.");
    if (!isValidDate(txt_ArrivalDate, "Arrival Date"))
        errorMessages.Add("Another message.");

    ...

    if (errorMessages.Any())
        MessageBox.Show(string.Join(Environment.NewLine, errorMessages), "Errors");

    return !errorMessages.Any();  // returns false if errors found, otherwise true
}