はじめに
C#を基礎から見直しているときに、
ラムダ式をちゃんと理解できていないことに気づきました。
いまさら感はありますが忘れないように備忘録としてまとめておきます。
開発環境
Visual Studio 2013 Ultimate
.NET Framework 4.7
テストコード
Main.cs
/// <summary>
/// メイン関数
/// </summary>
/// <param name="args">コマンドライン引数</param>
static void Main(string[] args)
{
// テストケース
var nameList = new List<string> {
"Tokyo", "Osaka", "Aichi", "America", "London", "Australia",
};
//-----------------------------------------
// リスト内から6文字以上の文字列を探す場合
//-----------------------------------------
// パターン1
var nameBuf1 = nameList.Where(s => 6 <= s.Length);
Print(nameBuf1);
// パターン2
Func<string, bool> func2 = (s) => 6 <= s.Length;
var nameBuf2 = nameList.Where(func2);
Print(nameBuf2);
// パターン3
Func<string, bool> func3 = (s) => { return 6 <= s.Length; };
var nameBuf3 = nameList.Where(func3);
Print(nameBuf3);
// パターン4
Func<string, bool> func4 = Judge;
var nameBuf4 = nameList.Where(func4);
Print(nameBuf4);
}
/// <summary>
/// パターン4確認用メソッド
/// </summary>
/// <param name="s">判定文字列</param>
/// <returns></returns>
static bool Judge(string s)
{
return 6 <= s.Length;
}
/// <summary>
/// 結果確認
/// </summary>
/// <param name="v">出力対象</param>
static void Print(IEnumerable<string> v)
{
foreach (var name in v)
{
Console.WriteLine(name);
}
Console.WriteLine("---");
}
最後に
基礎が理解できていないと応用も難しいのでしっかり理解していこうと思います。