れんしゅう
public void Test() { List<int> list1 = new List<int>{ 1, 2, 3, 4, 5 }; List<int> list2 = new List<int>{ 1, 10, 100, 1000, 10000 }; MapCar( ( v1, v2 ) => (v1 * v2).ToString(), list1, list2 ); MapCar( ( v1, v2 ) => { string result = ""; for ( int i=0 ; i<v1 ; i++ ) result += v2.ToString(); return result; }, list1, list2 ); } // mapcarもどき private void MapCar( Func<int, int, string> func, List<int> list1, List<int> list2 ) { if ( list1.Count != list2.Count ) return; for ( int i=0 ; i<list1.Count ; i++ ) { Console.WriteLine( func( list1[ i ], list2[ i ] ) ); } }
( v1, v2 ) => (v1 * v2).ToString()と書くより、
( ( v1, v2 ) => (v1 * v2).ToString() )と書いたほうが個人的には好みかもしれない。
2回目のMapCarは、ブロックを使っています。
これは、2006-MayCTPコンパイラでは出来なかった技です。(仕様書にはあったけど実装されてなかった)
ただ、return と書くまで型推論が行われないので青いの(?)が出てきてちょっとうざい。