前回はラムダ式とは関係ない,普通の文法で,string配列から,3文字以上の文字列を取得するコードを書きました。ここから徐々にラムダ式を目指していきますが,今回は,共通関数化を行います。3文字以上の文字列を取得するロジックの部分をメソッド化するということです。これがラムダ式とどういう関係があるのかと感じる方もいるでしょうが,1つずつ整理して考えていく必要があるので,信じてついてきてください。
メソッドの作成
それでは,前回3文字以上の文字列を取得したforeachのロジック部分をメソッド化します。次のようにメソッドを追記してください。
//3文字以上の文字列を返却する部分だけを共通関数化 private string[] GetValue1(string[] values) { var result = new List(); foreach (var val in values) { if (val.Length >= 3) { result.Add(val); } } return result.ToArray(); }
前回記述した,resultの生成部分とforeachの部分を抜き出して,resultを返却しています。resultはListで戻り値はstring配列にしているので,result.ToArray()としています。
メソッドの呼び出し部分を追加
先ほど記述したbutton1_Clickの最後にGetValue1メソッドの呼び出しと,その結果を出力するコードを記述します。
private void button1_Click(object sender, EventArgs e) { //ストリングの配列に5つの文字を入れる //文字数を1~5にする。Aは1文字,Bは2文字という感じで //意図的に文字数も変えている var values = new string[] { "A", "BB", "CCC", "DDDD", "EEEEE" }; //結果を入れるリスト var result = new List(); //3文字以上の文字列をresultに格納する foreach (var val in values) { if (val.Length >= 3) { result.Add(val); } } //結果を出力 //Joinは第1引数を区切り文字にしてリストを文字結合して出力する Console.WriteLine(string.Join(",", result)); //共通関数化した場合 var result2 = GetValue1(values); //ADD Console.WriteLine(string.Join(",", result2)); //ADD }
これで,前回の結果を出力後,今回の共通関数化の結果も出力されることになります。
実行
この状態で実行し,button1を押下して,出力ウィンドウの実行結果を確認します。
2行出力され,同じ結果が出力されることが確認できると思います。今回は前回作成したロジックをメソッド化しただけなので,同じ結果になって当然ですね。ここまでは当然の結果なのですが,今後のラムダ式のもとになる部分を段階的に解説しているので,もう少し辛抱してついてきてください。
#02_プロジェクトの作成
#03_ラムダなしで実装
#04_ラムダなしで実装_共通関数
#05_ラムダなしで実装_引数追加
#06_delegateを定義する方法
#07_delegateの使い方
#08_delegate_引数2つ
#09_匿名メソッドの使いかた
#10_Predicateの使い方
#コラム_C#の歴史とここまでのまとめ
#11_ラムダ式の書き方
#12_ラムダ式の実装
#13_FuncとActionとは
#14_Funcの実装とラムダ式複数パラメータの書き方
#15_ラムダの右辺が複数行の時の書き方
#16_Actionのパラメータありの実装
#17_Actionのパラメータありとラムダ式の書き方
#18_Actionのパラメータなしと引数なしのラムダ式の書き方
#19_コレクションに対する代表的なラムダ式の書き方
#20_カスタムクラスのコレクションに対するラムダの書き方