はじめての C#(2)
C# の文法はやばい。かっこよさ過ぎる。
foreach がキーワードとして用意されてて、しかもユーザ側が IEnumeratable を実装すれば何でも iterate 出来る部分とか、同じく IDispose を実装すれば、using ブロックの中で失敗したら Dispose() が呼ばれる部分とか、無駄がなくてかなりいい。
遊びで ReverceEnumerable を作ってみました。
class ReverceEnumerable : System.Collections.IEnumerable { class Enumerator : System.Collections.IEnumerator { public Enumerator(System.Collections.IEnumerable e) { current = 0; foreach (object obj in e) { list.Add(obj); current++; } max = current; } private List<object> list = new List<object>(); private int current; private int max; public object Current { get { if (current < 0 || current == max) { throw new System.InvalidOperationException(); } else { return list[current]; } } } public bool MoveNext() { return ((--current) >= 0); } public void Reset() { current = max; } } private System.Collections.IEnumerable enumerable; public ReverceEnumerable(System.Collections.IEnumerable enumerable) { this.enumerable = enumerable; } public System.Collections.IEnumerator GetEnumerator() { return new Enumerator(enumerable); } }
int[] array ={ 1, 2, 3, 4, 5, 6, 7 }; foreach (int n in array) { Console.Write(n); } Console.WriteLine(); foreach (int n in new ReverceEnumerable(array)) { Console.Write(n); }
1234567 7654321
何このお手軽さwwww楽しすぎwwwwww