冗長?、情調?
public class FooBar: IEnumerable { public IEnumerator GetEnumerator() { yield return bar++; } IEnumerable.IEnumerator GetEnumerator() { return GetEnumerator(); } }
C#の場合、IEnumerator
Javaのジェネリクスはイレイジャなので、同様のインタフェースがあってyieldキーワードも使えたとすれば恐らく二つ目のGetEnumeratorは不要のはずだ。
public class FooBarimplements IEnumerable { public IEnumerator getEnumerator() { yield return bar++; //実際にはこんなんないけど } } : IEnumerator e = new FooBar ().getEnumerator(); //はOK
覚え立ては型情報が厳格なC#のジェネリクスの方が元々好きだったんだが、上の例の様にイレイジャは実装時の制限が緩くなり、結果として記述量も減るのでJavaも悪くないなと思うようになった。※逆に言うと、キャストを減らしコード記述量が減るどころか却って記述量が増えている感に襲われるのがジェネリクス。前から書いているが
Dictionary, IEnumerable
> dic = new Dictionary , IEnumerable
>();
は
Dictionary, IEnumerable
> dic = new();
で書きたいんだよな。って、C#3.0ではvarキーワードと型推論が使えるから短く書けるのかな? (まだあまり使ってないのがばればれ)