前回のレッスンで少し触れましたが、戻り値型がvoidのメソッドでもreturnを記述することが可能です。
戻り値を持つメソッドにはreturn文の記述が必須です;
void戻り値なしメソッドはreturnの記述を強制されません:
コードがメソッド末尾の}まで実行されると自動的に呼び出し元に戻り、データは渡されません。
しかし業務コードではメソッドを途中で終了したい場面がよくあります。voidメソッドでは引数なしのreturn;を使って即座に処理を抜けられます:
構文:return; (後ろに式を記述しない)
制限:voidと宣言されたメソッド内部でのみ使用可能
例:
void SayHi()
{
Console.WriteLine("hello welcome to foxDevelop.com");
}Code language: C# (cs)
こちらは先ほど紹介したサンプルで、最も単純なvoidメソッドです。内部にreturnは不要です。
このメソッドを呼び出すと内部のWritelineが実行され、「hello welcome to foxDevelop.com」が出力されます。
static void Main()
{
Program program = new Program();
program.SayHi();
}
void SayHi()
{
Console.WriteLine("hello welcome to foxdevelop.com");
}Code language: C# (cs)

ここにreturn;を追加してみましょう。
void SayHi()
{
return; // return文を単独で記述すると現在のメソッドの実行を終了します
Console.WriteLine("hello welcome to foxdevelop.com");
}Code language: C# (cs)

実行しても何も出力されません。return;がConsole.WriteLineより前にあるため、returnに到達した時点で呼び出し元へ処理が戻り、後続のコードは実行されません。これは早期終了という動作です。

return以降のコードは永久に実行されません。
つまりvoidメソッドでもreturn;は利用可能です。ただしreturnの後に値を記述する必要はありません。

int Add(int a, int b)
{
return 100;
}Code language: C# (cs)
void以外の型のメソッドではreturn 値;が必須となります。
returnの後には必ず結果を記述する必要があります。変数、リテラル(100や3.14といった値)、a+bのような式のいずれでも構いませんが、最終的に何らかの結果を返す必要があります。
結果を記述せずvoidと同じようにreturn;と書くとコンパイルエラーになります。

voidメソッドの複数出口return
static void Main()
{
Program program = new Program();
program.ShowMax(100,200);
}
void ShowMax(int a, int b)
{
if (a>b)
Console.WriteLine($"{a}>{b}"); // 条件を満たしたらメソッドを即時終了
if (b > a)
Console.WriteLine($"{b}>{a}");
}Code language: C# (cs)

サンプルを見てみましょう:
class Program
{
static void Main()
{
Program program = new Program();
program.Greet();
}
private void Greet()
{
DateTime dt = DateTime.Now;
if (dt.Hour < 12)
return; // 12時前はそのまま終了、出力を行わない
Console.WriteLine("Good afternoon!");
}
}Code language: C# (cs)
現在時刻が12時を過ぎていれば午後の挨拶を出力し、そうでなければ出力をスキップして即座に戻ります。
voidメソッドにおけるreturn