从抽象类型对象的数组访问特定子类的对象

本文关键字:对象 子类 访问 数组 类型 抽象 抽象类 | 更新日期: 2023-09-27 18:33:23

我有一个简短的问题。

我有几个类,比如SubA,SubB和SubC类。我还有一个抽象类,比如说父级

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

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

我已经尝试了以下内容,但它产生了一个类型异常:

foreach (SubA a in Parent.GetList())

任何帮助将不胜感激。

从抽象类型对象的数组访问特定子类的对象

是的,当前代码具有隐式强制转换,如果集合中有"错误"类型的对象,该强制转换将失败。我建议你使用 LINQ 的OfType方法:

using System.Linq; // Make LINQ extension methods available
...
foreach (SubA a in Parent.GetList().OfType<SubA>())
{
    ...
}

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

此处记录了使用OfType<T>

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

若要获取特定实例,可以在数组上使用 Single 或 SingleOrDefault 扩展方法。如果集合不包含匹配元素,则 Single 将引发异常;单或默认将返回空值。

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

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

如果对象具有键

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

或者,您提供允许您识别实例的任何条件。