多くの異なる実装を格納するインタフェースのコレクションを定義しました。次に、これらの実装のうちの1つのサブセットのみを取得する必要があります。そして、私は、このサブセットに実装タイプ(インタフェースではない)をタイプすることで必要です。リストでサブセットをタイプ別に選択するには、これとは別の方法があります
私はそうする方法はたくさんあると思いますが、どちらが効率的かは不思議です。それを言って、私はefficient
が多くの意味(複雑さ、メモリ/ CPUの食べる、など)を取ることができることを認識しています。
他の言い方をすれば、これらの操作をどのように実行するのか教えていただけますか?
var myList = new List<IFoo>();
これは私が考えた最初のものです:
var mySubSet = myList.Where(f => f is FooImpl).Cast<FooImpl>();
しかし、私はそれを入力したとき、私は考えた:「これは、二回悪い考えをキャストを行います」。私が間違っている ?
だから私は考えた:
var mySubSet = myList.Select(f => f as FooImpl1).Where(f => f != null);
そしてもちろん、マニュアルループと、昔ながらの方法があります:
var mySubSet = new List<FooImpl1>();
foreach(var foo in myList)
{
var fooImpl1 = foo as FooImpl1;
if(fooImpl1 != null)
{
mySubSet.Add(fooImpl1);
}
}
おそらくこれを行うには、他の方法はたくさんありますが、私の質問を改善することを躊躇しないでください。
「OfType」[msdn](https://msdn.microsoft.com/en-us/library/bb360913(v=vs.110).aspx)を使用 –
正確な重複はしませんが、強く関連している可能性があります。http ://stackoverflow.com/questions/686412/c-sharp-is-operator-performance –