使用 LINQ 获取特定子类型的列表条目

Get List entries of a specific subtype using LINQ

我有三个 类:Foo、Bar 和 Baz。 Bar 和 Baz 都扩展了抽象的 Foo。我有一个 Foo 类型的列表,里面充满了 Bars 和 Bazes。我想将 LINQ Where 子句用于 return 所有一种类型。类似于:

class Bar : Foo
{
  public Bar()
  {
  }
}

class Baz : Foo
{
  public Baz()
  {
  }
}

List<Foo> foos = new List<Foo>() { bar1, bar2, foo1, foo2, bar3 };
List<Bar> bars;
bars = (List<Bar>)foos.Where(o => o.GetType() == Type.GetType("Bar"));

执行此操作时出现错误:附加信息:无法转换类型为 'WhereListIterator1[Foo]' to type 'System.Collections.Generic.List1[Bar]' 的对象。

尝试 OfType():过滤掉 Bar 项并将它们具体化到列表中:

List<Bar> bars = foos
  .OfType<Bar>()
  .ToList();

编辑: 如果你只想要 Bar 个实例,而不是 Baz 甚至 if/when Baz 是从 Bar 你必须添加一个条件:

List<Bar> bars = foos
  .OfType<Bar>()
  .Where(item => item.GetType() == typeof(Bar)) // Bar only
  .ToList();