1. ホーム
  2. .net

[解決済み] LINQはIEnumerableで動作しますか?

2023-02-21 08:54:01

質問

を実装したクラスがあります。 IEnumerable を実装していますが IEnumerable<T> . このクラスを変更することはできませんし、このクラスの代わりに別のクラスを使用することもできません。私がMSDNから理解したように を実装しているクラスはLINQを使用することができます。 IEnumerable<T> . 私は instance.ToQueryable() を使ってみましたが、それでもLINQメソッドを有効にすることはできません。このクラスが1つのタイプのインスタンスだけを含むことができることは確かなので、このクラスが実装できるのは IEnumerable<T> を実装することができますが、そうではありません。LINQ式を使用してこのクラスを照会するにはどうすればよいのでしょうか。

どのように解決するのですか?

この場合 Cast<T>() または OfType<T> で、LINQを完全にサポートするIEnumerableの一般的なバージョンを取得することができます。

eg.

IEnumerable objects = ...;
IEnumerable<string> strings = objects.Cast<string>();

あるいは、どのような型が含まれているか分からなければ、いつでもそうすることができます。

IEnumerable<object> e = objects.Cast<object>();

もし、一般的でない IEnumerable が様々なタイプのオブジェクトを含んでいて、 例えば文字列だけに興味がある場合、このようにすることができます。

IEnumerable<string> strings = objects.OfType<string>();