実装OfType
している限り、メソッドを使用して試すことができます:boxWithMyThings
IEnumerable<Thing>
var filtered = boxWithMyThings.OfType<ShingThing>().Where(st => st.facets == 10);
複数のタイプをフィルタリングしたい場合(多くの同様の呼び出しと一緒にShinyThings
使用できるだけではありません:Concat
IEnumerable<Thing> shinyEnough = boxWithMyThings.OfType<ShingThing>().Where(st => st.shininess >= 10);
IEnumerable<Thing> dirtyEnough = boxWithMyThings.OfType<DirtyThing>().Where(dt => dt.dirtiness >= 10);
var veryDirtyAndVeryCleanObjects = shinyEnough.Concat(dirtyEnough);
もちろん、型とキャストをチェックすることで、Where
ここにあるすべての述語を 1 つの大きなWhere
節に入れることができます。
boxWithMyThings.Where(t =>
{
if (t is ShinyThing)
return (t as ShinyThing).shininess >= 10;
else if (t is DirtyThing)
return (t as DirtyThing).dirtiness >= 10;
else return false;
});