如果返回一个void函数,如何停止执行下一个函数调用?

时间:2013-05-16 16:39:10

标签: c# return

我有两个不同的按钮点击,可以调用相同功能的修改版本......

private void button1_Click(object sender, EventArgs e)
{ SendEmail(); }

private void button2_Click(object sender, EventArgs e)
{ SendRevisedEmail();}



public void SendEmail()
{
  DataManip(ref item1, ref item2);  //This is where I'd like the next 2 functions to not process if this one fails.
  UpdateDB(ref item1, ref item2);
  sendTechEmail(ref item1, ref item2);
}

public void SendRevisedEmail()
{
  DataManip(ref item1, ref item2);  //This is where I'd like the next 2 functions to not process if this one fails.
  UpdateDB2(ref item1, ref item2);
  sendRevisedTechEmail(ref item1, ref item2);
}

DataManip函数中,我让它对表单执行一些检查并设置为抛出弹出消息并返回;如果它没有出现flag1 = true

public void DataManip(ref string item1, ref string item2)
{
  bool flag1 = false;

  foreach (Control c in groupBox1.Controls)
  {
    Radiobutton rb = c as RadioButton;
    if rb != null && rb.Checked)
    {
      flag1 = true;
      break;
    }
  }

  if (flag1 == true)
  {
    //Manipulate Data here
  }
  else if (flag1 != true)
  {
    MessageBox.Show("You didn't check any of these boxes!");
    return;
  };
}

截至目前,flag1签入DataManip工作正常。如果缺少groupBox1中的条目,我可以验证它是否处理数据更改。

问题是,在SendEmail()SendRevisedEmail()函数中,它仍会在DataManip(ref item1, ref item2)之后处理对其他函数的调用。

如何导致错误退出DataManip并阻止/跳过执行其他两个函数调用?

1 个答案:

答案 0 :(得分:6)

  

如何导致错误退出DataManip并阻止/跳过其他两个函数调用?

您有几个选择:

  • 更改方法以返回bool。这将允许您返回一个值,无论方法是否成功。
  • 如果方法“失败”是一个真正的错误,请引发异常。这将允许调用代码在需要时捕获并处理异常,或者如果它不知道如何处理它就冒泡。

请注意,您可能需要检查代码中的其他一些奇怪内容。您应该使用ref传递所有内容,这种情况很少见。此外,在操作数据的同一方法中使用消息框类型通知通常不是一个好主意 - 您可能需要考虑将值的验证/提取与数据操作分开。