12

ランダムな例:

ConfigurationElementCollection

.Netには、WhateverCollection実装されていないこれらの小さなクラスがたくさんありIEnumerable<T>ます。つまり、Linqを使用してオブジェクトをすぐに使用することはできません。Linqの前でさえ、ジェネリックを利用したいと思っていたと思います(C#2でずっと導入されていたと思います)

私はいつもこれらの厄介な小さなコレクションタイプに出くわしているようです。技術的な理由はありますか?

4

2 に答える 2

7

答えは、「名前付きコレクション」という質問のタイトルにあります。これは、ジェネリックが利用可能になる前に、コレクションをタイプ セーフにする必要があった方法です。.NET 1.x、特に Winforms にさかのぼるコードには、それらの多くがあります。ジェネリックを使用してそれらを書き直す合理的な方法はありませんでした。これでは、既存のコードが壊れてしまいます。

したがって、名前付きコレクション タイプはタイプ セーフですが、問題は System.Collections.IEnumerator.Current であり、Object 型のプロパティです。OfType() または Cast() を使用して、これらのコレクションを Linqify できます。

于 2013-01-09T17:05:31.303 に答える
1

Adam Houldsworth が既にコメントで述べているように、単に Cast<> メソッドを使用する必要があります。

例:

var a = new DogCollection();
var allFidos = a.Cast<Dog>().Where(d => d.Name == "Fido"); 
于 2013-01-09T17:09:16.947 に答える