如何在特定方法中停止代码

本文关键字:代码 方法 | 更新日期: 2023-09-27 18:01:47

我有两个方法,其中一个方法检查库存,另一个方法调用一系列其他方法。

检查库存方法

public void checkStock()
{
    foreach (var listBoxItem in listBox1.Items)
    {
        if (Convert.ToInt32(GetStock(listBoxItem.ToString())) == 0)
        {
            MessageBox.Show(listBoxItem.ToString() + " not in Stock!. Please delete the item before proceeding");
        }
     }
 }

另一种方法是

private void SaveAllListItems()
{
    string listItems = string.Empty;
    foreach (var listBoxItem in listBox1.Items)
    {
            listItems += listBoxItem.ToString();
            if (listBox1.Items.IndexOf(listBoxItem) < listBox1.Items.Count - 1)
            {
                listItems += ", ";
            }
    }
    checkStock();
    UpdateStock();
    InsertUser(maskedTextBox1.Text, comboBox1.Text, maskedTextBox2.Text, maskedTextBox3.Text, maskedTextBox4.Text, maskedTextBox5.Text,
                  maskedTextBox6.Text, maskedTextBox7.Text, maskedTextBox8.Text, maskedTextBox9.Text);
    InsertOrder(Convert.ToInt32(GetID(maskedTextBox1.Text)), orderNumber(), listItems, DateTime.Now, maskedTextBox10.Text, get_next_id());        
}

如果消息框是通过第一个方法显示的,我想停止代码执行。

快速解决方案是什么?

如何在特定方法中停止代码

切换检查库存的返回类型

public bool checkStock()
{
     foreach (var listBoxItem in listBox1.Items)
     {
         if (Convert.ToInt32(GetStock(listBoxItem.ToString())) == 0)
         {
              MessageBox.Show(listBoxItem.ToString() + " not in Stock!. Please delete the item before proceeding");
              return false;
         }
     }
return true;
}

在你的主代码中做这样的事情:

if (!checkStock())
{
     //EXIT
     return;
}

只需在必须中断执行的条件下执行return;,即可退出当前正在运行的方法。

或者,如果你想停止这两个方法的执行,那么你要么抛出一个异常(如果是这样的话,你想通过异常在代码中处理这样的情况(,要么让方法返回一个布尔值,例如,如果一切都好,则返回true,如果消息框的情况出现,则返回false,然后在主方法中你知道你必须中断。像这样:

   if (!checkStock()) { return; }

最简单、最快捷的方法是从checkStock()方法返回布尔值:

public bool checkStock()
{
    foreach (var listBoxItem in listBox1.Items)
    {
        if (Convert.ToInt32(GetStock(listBoxItem.ToString())) == 0)
        {
            MessageBox.Show(listBoxItem.ToString() + " not in Stock!. Please delete the item before proceeding");
            return false;
        }
     }
    return true;
 }

然后在调用SaveAllListItems方法中的checkStock()后对该值进行操作:

if (!checkStock())  
    return;

这将立即退出SaveAllListItems方法,而不执行其中的任何代码

进一步建议:checkStock()的访问器从public更改为protectedprivate-您不太可能需要从类/窗体外部访问它。

return;

将立即停止并返回,而不执行方法的其余部分。

是否应该使用MessageBox.Show((的重载函数之一?

例如:公共静态MessageBoxResult显示(字符串messageBoxText,字符串标题,MessageBoxButton按钮)

因此,循环可以检查MessageBoxResult。