我有一个简单的问题。
我有几个课程,比如Class SubA,SubB和SubC。 我也有一个抽象类,让我们说父母
所以我有一个Parent对象数组,其中包含SubA,SubB和SubC的实例。
我基本上是试图遍历数组或者父母并获得SubA的特定实例。
我已经删除了以下内容,但它产生了一个类型异常:
foreach (SubA a in Parent.GetList())
任何帮助将不胜感激。
答案 0 :(得分:6)
是的,当前代码有一个隐式转换,如果你的集合中有一个“错误”类型的对象,它将会失败。我建议你使用LINQ的OfType
方法:
using System.Linq; // Make LINQ extension methods available
...
foreach (SubA a in Parent.GetList().OfType<SubA>())
{
...
}
请注意a
在上面永远不会为空 - 我假设没关系。
答案 1 :(得分:5)
使用OfType<T>
记录here。
foreach(SubA a in Parent.GetList().OfType<SubA>())
答案 2 :(得分: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);
或者您提供了允许您识别实例的任何条件。