使用 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.List
1[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();
我有三个 类: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.List
1[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();