提问人:vytaute 提问时间:5/22/2023 最后编辑:Guru Stronvytaute 更新时间:5/22/2023 访问量:48
无法投射到对象
Unable to cast to object
问:
我有一个代码:
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'.
如何解决这个问题?
答:
3赞
Mong Zhu
5/22/2023
#1
OfType
将返回一个集合:IEnumerable。问题在于,您尝试将整个集合转换为单个元素。因此出现错误消息。
强制转换已由调用执行。您将需要不同的添加方法。它被称为 AddRange。OfType
将指定集合的元素添加到 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();
评论
OfType
将返回一个集合:。问题在于,您尝试将整个集合转换为单个元素。似乎您只想要一个元素,还是想要这种类型的所有元素?IEnumerable<TResult>
List.AddRange
var list = new List<IBO>(result.OfType<IBO>());
应该向列表中添加许多元素。new List<IBO>(...)