全てが E になる
C# 3.0 におけるルール E の存在.
ジェットコースターのような先週,私は一足先に解答編を聞いてしまったのですが.
言われてみればとてもシンプルなルール.いやほんと,波村さんに言われるまで全然気づきませんでした.
var x = new MyClass() { ID = 123 }; var y = new List<MyClass>() { new MyClass(){ID = 1}, new MyClass(){ID = 2} }; var z = new { ID = 1, Name = "Foo" };
記法が変? 必要な理由が分からない?
全てはルール E の必然.S では駄目だった.だから E.
static void Main(string[] args) { Expression<Func<int, IEnumerable<List<MyClass>>>> expr = X => from Y in Enumerable.Range(0, X) from Z in Enumerable.Range(X, Y) select new List<MyClass>() { new MyClass{ID = X}, new MyClass{ID = Y}, new MyClass{ID = Z} }; Console.WriteLine(expr.ToString()); }
X => Range(0, X).SelectMany(Y => Range(X, Y), (Y, Z) => new List`1() {Void Add(MyClass)(new MyClass() {ID = X}), Void Add(MyClass)(new MyClass() {ID = Y}), Void Add(MyClass)(new MyClass() {ID = Z})})
うーん,『C# 3.0を256倍使うための本 邪悪編』書きたくなってきたかも.需要は皆無に見えますけど.
内容は邪悪な型推論とか邪悪な partial の使い方とかとか邪悪なメタプログラミングとか.とにかく邪悪な方向で.