无法投射到对象

Unable to cast to object

提问人:vytaute 提问时间:5/22/2023 最后编辑:Guru Stronvytaute 更新时间:5/22/2023 访问量:48

问:

我有一个代码:

var result = BOBase.Search(Mapper.SourceBrowserType, searchCriteria);
var list = new List<IBO>(result.OfType<IBO>());

但是我需要能够在列表中添加许多元素。我试过了:

var list = new List<IBO>();
var result = BOBase.Search(Mapper.SourceBrowserType, searchCriteria);
list.Add((IBO)result.OfType<IBO>());

这会导致错误:

Unable to cast object of type '<OfTypeIterator>d__95`1[BO.IBO]' to type 'BO.IBO'.

如何解决这个问题?

C# 列表 对象 转换 枚举器

评论

1赞 Mong Zhu 5/22/2023
OfType将返回一个集合:。问题在于,您尝试将整个集合转换为单个元素。似乎您只想要一个元素,还是想要这种类型的所有元素?IEnumerable<TResult>
1赞 shingo 5/22/2023
可能您正在寻找 List.AddRange
1赞 Guru Stron 5/22/2023
var list = new List<IBO>(result.OfType<IBO>());应该向列表中添加许多元素。
0赞 MakePeaceGreatAgain 5/22/2023
“但我需要能够在列表中添加许多元素”确实如此new List<IBO>(...)

答:

3赞 Mong Zhu 5/22/2023 #1

OfType将返回一个集合:IEnumerable。问题在于,您尝试将整个集合转换为单个元素。因此出现错误消息。

强制转换已由调用执行。您将需要不同的添加方法。它被称为 AddRangeOfType

将指定集合的元素添加到 List 的末尾。

list.AddRange(result.OfType<IBO>());
1赞 Guru Stron 5/22/2023 #2

第二个代码片段应使用 AddRange,而不进行额外强制转换:IBO

将指定集合的元素添加到 的末尾。List<T>

var list = new List<IBO>();
var result = BOBase.Search(Mapper.SourceBrowserType, searchCriteria);
list.AddRange(result.OfType<IBO>());

请注意,这两个代码段将执行相同的操作。如果您只有一个源集合,则只需使用第一个源集合。

0赞 MakePeaceGreatAgain 5/22/2023 #3

您不需要额外的 -call,只需使用需要 :Add***IEnumerable<IBO>

var list = new List<IBO>(result.OfType<IBO>());

但是我需要能够在列表中添加许多元素。

事实上,上面正是这样做的:它将指定类型的所有元素添加到新创建的列表中。

交替使用这个:

var list = result.OfType<IBO>().ToList();