さて、C#応用 LINQプログラミング
第7回である。
ウォッチは 変数を選んで
Ctrl + Q
ForEachメソッド
.NET Framework 3.5のコレクションクラスから
ForEachメソッドが追加された。
List<int> l = new List<int>();
l.Add(1);
l.Add(2);
l.Add(3);
l.ForEach((int i) => { Console.WriteLine(i); });
FoaEachメソッドに繰り返しを行いたい処理のdelegateを渡すことができるメソッドである。
自作すると、このような形式である。
public class Range
{
public static ForEach(int from, int to, Action<int> act)
{
for(int i = from; int <= to; i++) act(1);
}
}
// 別メソッド
Range.ForEach(0, 10, (i) => { Console.WriteLine("{0}", i); });
yeildとは?
IEnumeratorを実装するクラスの自動生成を行う。
public class Counter : IEnumerable<int>
{
public int CountStop;
// ジェネリックのIEnumeratorを利用
public IEnumerator<int> GetEnumerator()
{
for (int i = 1; i <= CountStop; i++)
{
yield return i;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
動作としては、処理の中断である。
仮にCountStopに 10 をセットすると、先ほどのクラスは以下と同等である。
public class Counter : IEnumerable
{
public IEnumerator<int> GetEnumerator()
{
yield return 1;
yield return 2;
yield return 3;
yield return 4;
yield return 5;
yield return 6;
yield return 7;
yield return 8;
yield return 9;
yield return 10;
}
}
public class Counter : IEnumerable
{
public IEnumerator<int> GetEnumerator()
{
int i++;
if (i > 5) yield break;
yield return i;
}
}
yield return や yield break と組み合わせることで構文として意味を持つようになる。
今日の名言
人生はまさにブーメランだ。人に与えたものは手元に返ってくる。
デール・カーネギー
誰でも悩みや恐怖やさまざまの病気を追放できる。そして自分の心の
持ち方を変えることにより、人生を一変させることができる。私には
わかっているのだ!なぜなら、そうしたまさかと思われるような変容が
実際に起こるのをこの目で何度も見届けてきたから。あまりにもたくさん
見すぎて、もはや大して驚かないくらいだ。
デール・カーネギー
自分の今行っていること、行ったことを心から楽しめるものは幸福である。
ヨハン・ウォルフガング・フォン・ゲーテ
ありとあらゆるものに心から興味を持ち、自分の道を歩むに従ってどんな時と
機会が手を差し伸べているかをとらえる目を持ち、自分の手を置けるものは
何物も逃さない者、そうした人間は、短い人生のうちに何と多くの素晴らしい
冒険を手に入れることだろうか!
ローレンス・スターン
