C#の匿名関数の便利な使い方(既存の重複部分の関数移行のケース)

C#には匿名関数というのがありますが、ネットで調べても宣言の仕方ぐらいしか検索上位にこないので、

使っていて  『超便利!!!』  と思った使い方とその特徴をちょっとご紹介します。

どちらかというと『スッキリ』的!ですが、関数にした方が綺麗だし書きやすいが、今の関数専用になるから新たに関数にするのも気が引ける・・・そんなときに匿名関数!

既存の関数でローカル変数や条件式がガッツリなものがあったときに、機能追加で「全く同じ処理」
を記述した方が修正範囲が最小で済むという悩ましいときが、というのがあると思います。
だけど別の関数にするのはローカル変数への変更処理があるから面倒だし、関数への移行で新たなバグが・・・

そんなときに重複部分を匿名関数にして、proc_HOGE();とすると処理をパッケージ化でき、しかも簡単にできます。後々、関数化するにしても既に{ }で括られている範囲なので修正が楽です。

書式等は専門のページに任せるとして、既存の重複部分の移行のケースで違いをみてみましょう。

ローカル変数への代入文
●(普通の)関数を作成 : 1個なら返値。2個以上なら引数をrefまたはout。 でも1個でも返値は意味をもたしたいとか、voidが・・・と悩む
●匿名関数 : 単に外側に{ } を追加しただけと同じ扱い。つまりシームレス!

速攻で仕事が簡便に、しかも安全に行えます。

匿名関数は返値が必須の仕様(.NET現在)なので、今回の用途ではとりあえずダミーでreturn true;を記述しておきます。

サンプル:
元が

bool is_erace = true;
bool is_b_chenged = false;
int b = 1;
if( is_erace )
{
b = 0;
is_erace_done = true;
}
else
{
b = b + 1;
is_erace_done = true;
}

この is_erace_done = true; を匿名関数に移行してみます。

bool is_erace = true;
bool is_b_chenged = false;
int b = 1;

Func<bool> proc_ChengeSetting = () =>
{ //匿名関数
is_erace_done = true;

return true; // 匿名関数の仕様は返値が必須なので。
}; // 「;」が必要です。

if( is_erace )
{
b = 0;
proc_ChengeSetting();
}
else
{
b = b + 1;
proc_ChengeSetting();
}

こんな感じです。