C# 2.0でやってたものを思い出すと、
yield , 匿名 delegate ,Generics,イテレータ等がある。
実際にコードを書いてみる。
yield,Generics,イテレータ
namespace CSharp2 { class Program { static void Main(string[] args) { int[] arr = new int[50]; for (int i = 0; i < arr.Length; i++) arr[i] = i + 1; foreach (int k in mod2_list(arr)) System.Console.WriteLine("mod2 value : {0}",k); /* この行はエラーになる。イテレータを配列には直せないらしい。 */ int[] arr2 = (int[])mod2_list(arr); foreach (int k in arr2) System.Console.WriteLine("all of arr2 : {0}",k); } static IEnumerable<int> mod2_list(IEnumerable<int> values) { foreach (int val in values) { if (0 == (val % 2)) yield return val; } } } }
yield でフィルタをかけてみた例。
int 程度では恩恵無いけど、複雑なオブジェクトだと恩恵あると思われ。
匿名delegate は以下の様なもの。
namespace delegateSample { class Program { delegate int iDeliSample(int argi); static void Main(string[] args) { executeSomething(delegate(int s) { return s / 2; }); } private static void executeSomething(iDeliSample method) { System.Console.WriteLine(method(52)); } } }
匿名関数みたいなもんだ。
こういう機能も便利なんだが、C#3.0 はもっとステキな機能があるらしい。
(次回に続く)