非ジェネリック クラスが時代遅れになっている (ほぼ) という騒ぎの後で、なぜ .NET コレクション クラスはまだ非ジェネリックなのですか? たとえば、Control.ControlCollectionは実装せずIList<T>
のみIList
、またはFormCollectionは upto のみ実装し、 は実装しICollection
ませんICollection<T>
。便利な操作を行う必要があるたびに、次のように、コレクション クラスを同等のジェネリック型に変換する必要がありますIEnumerable<T>
。Linq
this.Controls.OfType<Control>();
保持できる唯一のものが再びコントロールである場合に、Control
このような操作で指定する必要があるのは奇妙です。ControlCollection
これらのコレクションが .Net 1.1 の時代に存在していたことを考えると、下位互換性を維持するためですか? そうだとしても、これらのコレクション (さらに多くのコレクションがあります) が、後方互換性を損なうことはないと私が信じている既存のものと一緒に、ジェネリック インターフェイスをさらに実装できないのはなぜですか。ジェネリックの重要な何かが欠けているかどうかはわかりません。アイデアが完全ではない可能性があります..
編集: WinFormsだけを念頭に置いていたときにこれを尋ねましたが、これはWPFのような新しいテクノロジーにも当てはまることがわかりました。@Dennis が指摘しているように、WPF にも非ジェネリック コレクションがあります。たとえば、WindowCollectionまたはItemCollection。WPF は .NET 3 とともにリリースされましたが、ジェネリックは .NET 2 で導入されました:-o
これに更新:
現在、これに対するチケットがあります: https://github.com/dotnet/winforms/issues/2644 (もちろん .NET Core)。