web-dev-qa-db-ja.com

プログラムを終了せずにメソッドを終了する方法は?

私はまだC#にかなり慣れていないので、C/CPPと比較して慣れるのに苦労しています。

この関数のようにプログラムを終了せずにC#で関数を終了するにはどうすればよいですか?

if (textBox1.Text == "" || textBox1.Text == String.Empty || textBox1.TextLength == 0)
    textBox3.Text += "[-] Listbox is Empty!!!!\r\n";
System.Environment.Exit(0);

これは戻り値の型を許可せず、そのままにしておくと関数が止まることなく継続します。これは望ましくありません。

56
Nightforce2

メソッドを早期に終了するには(プログラムを終了せずに)2つの方法があります。

  • return キーワードを使用します。
  • 例外をスローします。

例外は、例外的な状況でのみ使用する必要があります-メソッドが続行できず、呼び出し側にとって意味のある妥当な値を返すことができない場合。通常は、完了したらただ戻る必要があります。

メソッドがvoidを返す場合、値なしでreturnを書くことができます:

return;

特にあなたのコードについて:

  • 同じテストを3回書く必要はありません。これらの条件はすべて同等です。
  • また、ifステートメントを記述するときに中括弧を使用して、ifステートメントの本体内にあるステートメントを明確にする必要があります。

    if (textBox1.Text == String.Empty)
    {
        textBox3.Text += "[-] Listbox is Empty!!!!\r\n";
    }
    return; // Are you sure you want the return to be here??
    
  • .NET 4を使用している場合、要件に応じて、ここで String.IsNullOrWhitespace を使用することを検討することができます。

  • mightEnvironment.Newlineの代わりに "\r\n" を使用したい。
  • テキストボックスにメッセージを書き込む以外に、無効な入力を表示する別の方法を検討することもできます。
128
Mark Byers

Markの答えに加えて、(C/C++の場合のように)波括弧を使用して指定されるスコープにも注意する必要があります。そう:

if (textBox1.Text == "" || textBox1.Text == String.Empty || textBox1.TextLength == 0)
    textBox3.Text += "[-] Listbox is Empty!!!!\r\n";
return;

その時点で常に戻ります。しかしながら:

if (textBox1.Text == "" || textBox1.Text == String.Empty || textBox1.TextLength == 0)
{
    textBox3.Text += "[-] Listbox is Empty!!!!\r\n";
    return;
}

ifステートメントに入る場合にのみ戻ります。

8
Smashery

return null;を使用して、返されるデータがないことを示します

1
beaumondo

ここでの基本的な問題は、System.Environment.Exitreturnと間違えていることです。

0
Loren Pechtel

@ジョン、アールズ、ネイサン。私がuniで学んだ方法は、関数は値を返しますが、メソッドは返しません。一部の言語では、構文は実際に異なります。例(特定の言語なし):

Method SetY(int y) ...
Function CalculateY(int x) As Integer ...

現在、ほとんどの言語は両方のバージョンで同じ構文を使用しており、戻り値の型としてvoidを使用して、実際には戻り値の型がないことを示しています。構文がより一貫性があり、メソッドから機能へ、またはその逆に変更しやすいためだと思います。

0
Stefan

関数がvoidの場合、関数を終了するとreturnになります。それ以外の場合は、明示的なreturn someValueを実行する必要があります。マークが言及したように、throw例外もできます。あなたの質問の背景は何ですか?関数を終了するいくつかの方法を示すために、より大きなコードサンプルがありますか?

0
user29439