ようこそ。睡眠不足なプログラマのチラ裏です。

.NET Frameworkの代表的なコレクションとかいいつつ非ジェネリックって…?なんぞこれ。

CodeZineにて

.NET Frameworkの代表的なコレクションと使い方
http://codezine.jp/article/detail/3640


という記事がありまして、結構な数のはてブをゲットしている人気記事のようでした。
でもなんで?というのが正直な感想です。「なんで?」の意味するところは2つあって、1つは、
どうして今、わざわざ非ジェネリックコレクションの利用を助長するかのような記事がCodeZineで掲載されるのかという疑問。
2つ目は、どうしてこの記事が結構なはてブをゲットするほど注目されているのかという疑問です。


ジェネリック型を利用することによる可読性の向上や、ボックス化のないタイプセーフで
高パフォーマンスなメリットをわざわざ殺してまで、非ジェネリック型を利用する理由が全く見当たらない。
必要になるようなケースが思いつかない。仮にどうしてもごちゃ混ぜの型をコレクションに
ぶっこみたいような場合は、最悪Listとかでも別にいいわけで。
少々乱暴だが、.NET Framework2.0以降で非ジェネリック型を使う理由は"ない"と断言してもよいくらいです。
そもそも、ジェネリックコレクションでは非ジェネリックコレクションで提供される機能がすべて提供されているので、
重複させる必要が全くないんですよね。言うなれば、非ジェネリックコレクションは互換性のために残されているだけの異物です。
だから、「非ジェネリックコレクションって、もーそろそろ撲滅してもいいんじゃね?」と思うんですよね。
いっそのことObsolete属性でもつけて、警告だらけにするのも1つの手なんじゃー?とかも思うわけです。
現に、Silverlight BCLでは、非ジェネリックコレクションは組み込まれていませんからね。MSさんGJですよ。


.NET Framework1.xを使わなければならない環境にある人のみを対象とするのであれば、
有意義な記事かとは思うのですが。どーも、そーいうふうな書きくちではないようでしたので。

最近話題にあがることが多いGenerics(総称型)を使ったコレクションではなく、
Collections直下の機能を使う最大の利点は、サポートされているフレームワークの幅が広いという点にあります。

って、どうもズレてますね。.NET Framework2.0以降が利用できるのであれば、
ジェネリック型のコレクションをわざわざ使う理由は、これっぽっちもないわけですから。



■関連記事
OrderedDictionaryクラスのジェネリック対応してみた。System.Collections.Specialized 名前空間以下のコレクションはジェネリック対応されていないんだよね。