3

同じ関数の変更されたバージョンを呼び出す 2 つの異なるボタン クリックがあります...

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エラーを発生させて、他の 2 つの関数呼び出しの実行を防止/スキップするにはどうすればよいですか?

4

1 に答える 1

6

DataManip からエラーを発生させ、他の 2 つの関数呼び出しの実行を防止/スキップするにはどうすればよいですか?

いくつかのオプションがあります:

  • を返すようにメソッドを変更しboolます。これにより、メソッドが成功したかどうかに応じて値を返すことができます。
  • メソッドの「失敗」が真のエラーである場合は、例外を発生させます。これにより、呼び出し元のコードは、必要に応じて例外をキャッチして処理することができます。また、処理方法がわからない場合は、単にバブルアップすることもできます。

コードには他にも確認したい奇妙な点があることに注意してください。ですべてを渡す必要があることはめったにありませんref。さらに、データの操作を行う同じメソッド内でメッセージ ボックス タイプの通知を使用することは、多くの場合、お勧めできません。データの操作から値の検証/プルを分離することを検討することをお勧めします。

于 2013-05-16T16:41:00.577 に答える