2

我有一个快速的问题。

我有几个类,比如 Class SubA、SubB 和 SubC。我也有一个抽象类,可以说是 Parent

所以我有一个父对象数组,其中包含 SubA、SubB 和 SubC 的实例。

我基本上是在尝试遍历数组或父母并获取 SubA 的特定实例。

我尝试了以下方法,但它产生了一个类型异常:

foreach (SubA a in Parent.GetList())

任何帮助将不胜感激。

4

3 回答 3

6

是的,当前代码有一个隐式转换,如果你的集合中有一个“错误”类型的对象,它将失败。我建议你使用 LINQ 的OfType方法:

using System.Linq; // Make LINQ extension methods available

...

foreach (SubA a in Parent.GetList().OfType<SubA>())
{
    ...
}

请注意,a上述内容永远不会为空 - 我假设没关系。

于 2013-09-30T16:12:24.320 回答
5

使用OfType<T>记录在这里

foreach(SubA a in Parent.GetList().OfType<SubA>())
于 2013-09-30T16:12:36.413 回答
0

要获取特定实例,您可以在数组上使用 Single 或 SingleOrDefault 扩展方法。如果集合不包含匹配元素,Single 会抛出异常;SingleOrDefault 将返回 null。

如果您正在寻找某种类型的对象

var result = parents.Single(p => p is SubA);

如果对象有键

var result = parents.Single(p => p is SubA and p.Id == id);

或者您提供任何允许您识别实例的标准。

于 2013-09-30T16:31:56.573 回答