C# 如果c中的条件满足,则立即停止方法的执行#

C# 如果c中的条件满足,则立即停止方法的执行#,c#,C#,我有几个if语句。我想要的是,只要满足一个条件,我就应该退出这个方法。我将使用这个if语句来过滤datagridview或报表的数据。在我下面的代码中,它不能做到这一点。它似乎经历了所有的条件。一旦发现满足条件,程序就会执行它并继续执行另一个if语句,如果它看到它也满足条件,它也会被执行。 我认为这对你来说是很基本的。我不记得也不知道该怎么做 private void btnRoute_Click(object sender, EventArgs e) { if (cbW

我有几个if语句。我想要的是,只要满足一个条件,我就应该退出这个方法。我将使用这个if语句来过滤datagridview或报表的数据。在我下面的代码中,它不能做到这一点。它似乎经历了所有的条件。一旦发现满足条件,程序就会执行它并继续执行另一个if语句,如果它看到它也满足条件,它也会被执行。 我认为这对你来说是很基本的。我不记得也不知道该怎么做

private void btnRoute_Click(object sender, EventArgs e)
    {
        if (cbWithRoute.Checked)
        {
            // StartSearch(txtRoute.SelectedValue.ToString());
            MessageBox.Show(@"route");
        }
        if (cbWithRoute.Checked && cbWithWholeSeller.Checked)
        {
            //StartSearch(txtRoute.SelectedValue.ToString(), txtWholeSeller.SelectedValue.ToString());
            MessageBox.Show(@"route wholeseller");
        }
        if (cbWithRoute.Checked && cbWithCustomer.Checked)
        {
            MessageBox.Show(@"route customer");
        } 
        if (cbWithRoute.Checked && cbWithWholeSeller.Checked && cbWithDate.Checked)
        {
            //StartSearch(txtRoute.SelectedValue.ToString(),
            //    txtWholeSeller.SelectedValue.ToString(), Convert.ToDateTime(txtFromDate.Text).ToShortDateString(),
            //    Convert.ToDateTime(txtToDate.Text).ToShortDateString());
            MessageBox.Show(@"route wholseller date");
        }
        if (cbWithRoute.Checked && cbWithCustomer.Checked && cbWithDate.Checked)
        {
            MessageBox.Show(@"route date customer");
        }
        if (cbWithRoute.Checked && cbWithWholeSeller.Checked && cbWithDate.Checked && cbWithCustomer.Checked)
        {
            //StartSearch(txtRoute.SelectedValue.ToString(),
            //    txtWholeSeller.SelectedValue.ToString(), Convert.ToDateTime(txtFromDate.Text).ToShortDateString(),
            //    Convert.ToDateTime(txtToDate.Text).ToShortDateString(), txtCustomer.SelectedValue.ToString());
            MessageBox.Show(@"route wholeseller date customer");
        }
        //else
        //{
        //    MessageBox.Show(@"Check criteria to search.");
        //}

    }

我对真实代码进行了注释,并将其替换为消息框,以显示选中了哪些复选框。谢谢。

因为您的方法retrun类型是
void
添加
return
到所有if条件的末尾,如下所示

if (cbWithRoute.Checked)
{
    // StartSearch(txtRoute.SelectedValue.ToString());
    MessageBox.Show(@"route");
    return;
}
if (cbWithRoute.Checked && cbWithWholeSeller.Checked)
{
    //StartSearch(txtRoute.SelectedValue.ToString(), txtWholeSeller.SelectedValue.ToString());
    MessageBox.Show(@"route wholeseller");
    return;
}

依此类推……

因为您的方法retrun类型是
void
添加一个
return
到所有if条件的末尾,如下所示

if (cbWithRoute.Checked)
{
    // StartSearch(txtRoute.SelectedValue.ToString());
    MessageBox.Show(@"route");
    return;
}
if (cbWithRoute.Checked && cbWithWholeSeller.Checked)
{
    //StartSearch(txtRoute.SelectedValue.ToString(), txtWholeSeller.SelectedValue.ToString());
    MessageBox.Show(@"route wholeseller");
    return;
}

以此类推……

如果您希望它停止执行,请将下面一行

return;

我不想理解检查背后的业务逻辑,但您可能还需要阅读
else
语句和
else,如果

您希望它停止执行,请将下面一行

return;

我不想理解检查背后的业务逻辑,但您可能还想阅读
else
语句和
else if

else if是您需要的概念。如下图所示

if (cbWithRoute.Checked)
    {
        // StartSearch(txtRoute.SelectedValue.ToString());
        MessageBox.Show(@"route");
    }
    else if (cbWithRoute.Checked && cbWithWholeSeller.Checked)
    {
        //StartSearch(txtRoute.SelectedValue.ToString(), txtWholeSeller.SelectedValue.ToString());
        MessageBox.Show(@"route wholeseller");
    }

否则,如果是你需要的概念。如下图所示

if (cbWithRoute.Checked)
    {
        // StartSearch(txtRoute.SelectedValue.ToString());
        MessageBox.Show(@"route");
    }
    else if (cbWithRoute.Checked && cbWithWholeSeller.Checked)
    {
        //StartSearch(txtRoute.SelectedValue.ToString(), txtWholeSeller.SelectedValue.ToString());
        MessageBox.Show(@"route wholeseller");
    }


你的意思是像其他的,如果?当然,您需要重新安排您的条件,否则只要
cbWithRoute.Checked
不查看其他检查,方法就会退出。如果您更改为if-else,那么您将获得不检查每个条件的好处,并且不需要返回语句。您也可以考虑将第一个条件嵌套为最外面的if语句,这样就不必一次又一次地检查它。选项CBWRououTE。它自己检查的是默认选项,应该是方法中测试的最后一个项目而不是第一个。然后在每个if语句中添加一个return将解决这个问题。@jdweng:完全正确。这就是我在你发表评论之前所做的,现在正在发挥作用。谢谢你,你是说像其他的吗?当然,您需要重新安排您的条件,否则只要
cbWithRoute.Checked
不查看其他检查,方法就会退出。如果您更改为if-else,那么您将获得不检查每个条件的好处,并且不需要返回语句。您也可以考虑将第一个条件嵌套为最外面的if语句,这样就不必一次又一次地检查它。选项CBWRououTE。它自己检查的是默认选项,应该是方法中测试的最后一个项目而不是第一个。然后在每个if语句中添加一个return将解决这个问题。@jdweng:完全正确。这就是我在你发表评论之前所做的,现在正在发挥作用。谢谢,这是我第一次尝试。如果我在每个语句上放置一个返回,比如我检查cbWithRoute和cbWithCustomer,它将执行第一个If语句并退出实际上是错误的方法。它应该跳过cbWithRoute.Checked和第二条语句,并执行第三条语句,因为这是正确的语句。然后您应该组织所有的if条件,以便您的程序应该如何执行它们。请优先考虑条件。这是我第一次尝试的。如果我在每个语句上放置一个返回,比如我检查cbWithRoute和cbWithCustomer,它将执行第一个If语句并退出实际上是错误的方法。它应该跳过cbWithRoute.Checked和第二条语句,并执行第三条语句,因为这是正确的语句。然后您应该组织所有的if条件,以便您的程序应该如何执行它们。请优先考虑条件。这是我第一次尝试的。如果我在每个语句上放置一个返回,比如我检查cbWithRoute和cbWithCustomer,它将执行第一个If语句并退出实际上是错误的方法。它应该跳过cbWithRoute.Checked和第二条语句,然后执行第三条语句,因为这是正确的一条。这是我尝试的第一件事。如果我在每个语句上放置一个返回,比如我检查cbWithRoute和cbWithCustomer,它将执行第一个If语句并退出实际上是错误的方法。它应该跳过cbWithRoute.Checked和第二条语句,并执行第三条语句,因为这是正确的语句。如果我要使用else If,那么我应该删除每条语句的返回。我就是这么做的。我删除了返回值并添加了else if,但它与放置返回值完全一样。在一个方法中放置多个返回值被认为是不好的做法。因此,为了避免多个exit-else-if可以被考虑,我在else-if中加上它是不够的。我把这句话写反了。我从最多的条件到最少的条件开始,它起了作用@Irshad:我使用了你的评论。如果我要使用else If,那么我应该删除每个语句的返回。我就是这么做的。我删除了返回值并添加了else if,但它与放置返回值完全一样。在一个方法中放置多个返回值被认为是不好的做法。因此,为了避免多个exit-else-if可以被考虑,我在else-if中加上它是不够的。我把这句话写反了。我从最多的条件到最少的条件开始,它起了作用@伊沙德:我用了你的评论。