nakamurakko’s diary

たまに書く

C# Lambdaでループを書き換えてみる

「yyyyMMdd」形式の文字列を用意する。 

  1. // 「yyyyMMdd」形式で日付を表す文字列のリスト。
  2. List<string> stringDateTimes = new List<string>();
  3. stringDateTimes.Add("20161011");
  4. stringDateTimes.Add("20150303");
  5. stringDateTimes.Add("20161215");

foreachでループさせて出力

  1. foreach (string stringDateTime in stringDateTimes)
  2. {
  3.     Console.WriteLine(DateTime.ParseExact(stringDateTime, "yyyyMMdd", null));
  4. }

Selectメソッドで取り出した結果をLambdaでDateTimeのコレクションに変換してから出力

  1. IEnumerable<DateTime> dateTimes = stringDateTimes.Select(
  2.     (string stringDateTime) =>
  3.     {
  4.         return DateTime.ParseExact(stringDateTime, "yyyyMMdd", null);
  5.     }
  6. );
  7. foreach (DateTime d in dateTimes)
  8. {
  9.     Console.WriteLine(d.ToString());
  10. }

Selectメソッドで取り出した結果をLambdaでDateTimeのコレクションに変換してから出力(varを使ったり、式形式のLambdaに変えたりして記述)

  1. var dateTimes2 = stringDateTimes.Select(
  2.     (string stringDateTime) => DateTime.ParseExact(stringDateTime, "yyyyMMdd", null)
  3. );
  4. foreach (DateTime d in dateTimes)
  5. {
  6.     Console.WriteLine(d.ToString());
  7. }

ForEachメソッドで繰り返し、LambdaでDateTimeに変換と出力

  1. stringDateTimes.ForEach(
  2.     (string stringDateTime) =>
  3.     {
  4.         DateTime d = DateTime.ParseExact(stringDateTime, "yyyyMMdd", null);
  5.         Console.WriteLine(d.ToString());
  6.     }
  7. );

Lambdaはいつも混乱するからメモ代わりに。