通常匿名メソッドを実装する時は、宣言と代入が同じになるパターンが多い。
例えば、下記のコードのように。
public void 匿名メソッドで再帰() { Func<int, bool> カウントダウン = (x) => { if (x == 0) { return true; } Console.WriteLine(x); x--; return カウントダウン(x); }; カウントダウン(40); }
しかし、上記のコードだと、
未割り当てのローカル変数 'カウントダウン' が使用されました。
と言われてコンパイルエラーになる。
では、どうしたら良いかというと、先に匿名メソッドを代入する変数を宣言しておけばよい。
下記のコードならコンパイルエラーにならないで正しく動作する。
public void 匿名メソッドで再帰() { Func<int, bool> カウントダウン = null; カウントダウン = (x) => { if (x == 0) { return true; } Console.WriteLine(x); x--; return カウントダウン(x); }; カウントダウン(40); }