アジョブジ星通信

日常系バンザイ。

有限コレクションであることを明示しようとするライブラリをつくった話

お久しぶりです。スカイツリーブログを 2 ヶ月近く更新してない気がしますが、撮影はしてます。

CountableSharp

で、これが問題のライブラリです。

LINQ to IReadOnlyCollection<T>

GitHub - azyobuzin/CountableSharp: LINQ to IReadOnlyCollection<T>

要は要素数が変わらない Enumerable のメソッドを IReadOnlyCollection<T> 向けにラップしたものです。 ICollection<T> ?知らない子ですね(型推論の妨害になるからやめた)。

何がしたかったのか

Enumerable.Range や Repeat は必ず決まった要素数IEnumerable<T> を返しますが、 IEnumerable<T> だけでは要素数どころか有限なのか無限なのかすらわからない状態です。なので有限であることを明示するために積極的に IReadOnlyCollection<T> を使ってみようという試みをしてみました。まぁ Where した瞬間に IEnumerable<T> になるのでまったくもって無意味な気もしなくもないですが、なんとなくやってみたかったんです、はい。

結局どうなの

.NET が有限コレクションであることを明示するようなインターフェイスをつくってくれない限り IEnumerable<T> を暗黙の了解で使うしかなさそうです。 IReadOnlyCollection<T> は要素数がはっきりわかってるときしか使えないですし。

やっぱり一度基本ライブラリに破壊的変更を入れて欲しいところです。