はじめての 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