尝试从对象数组中获取自定义对象类型数组

Spa*_*y74 2 c# linq arrays

我有一个函数返回一个对象数组.问题是,对象可以是三种不同类型之一.我试图将这些对象分解为不同自定义类型的数组.

例如:

var collection = something.ReturnObjArray();
var Details = collection.Where(a => a is DetailItem);
var Addenda = collection.Where(a => a is AddendaItem);
Run Code Online (Sandbox Code Playgroud)

如果我执行上述操作并尝试访问foreach循环中的数据,以将附录放入详细项目中的集合中:

foreach (var addendaItem in Addenda)
{
    var detailItem = Details.Single(d => d.DetailAddendaKey == addendaItem.Key);
    detailItem.Addenda.Add(addendaItem);
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下:

'object'不包含'DetailAddendaKey'的定义,并且没有扩展方法'DetailAddendaKey'可以找到接受'object'类型的第一个参数(你是否缺少using指令或汇编引用?)

其中包括.如果我尝试将详细信息和附录的var更改为:

IEnumerable<DetailItem> Details = collection.Where(a => a is DetailItem);
IEnumerable<AddendaItem> Addenda = collection.Where(a => a is AddendaItem);
Run Code Online (Sandbox Code Playgroud)

我超越了上面的错误,但现在得到:

无法隐式转换'System.Collections.Generic.IEnumerable<object>''System.Collections.Generic.IEnumerable<MyNameSpace.DetailItem>'.存在显式转换(您是否错过了演员?)

有什么想法我需要做什么?

Mar*_*ers 7

使用OfType<T>.

根据指定的类型过滤IEnumerable的元素.

例:

IEnumerable<DetailItem> Details = collection.OfType<DetailItem>();
Run Code Online (Sandbox Code Playgroud)