向List<IBO>添加元素时遇<OfTypeIterator>类型转换错误的解决
解决向List添加元素时的类型转换错误
问题背景
原本初始化List<IBO>的代码是这样的:
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'.
错误原因
result.OfType<IBO>()返回的是一个IEnumerable<IBO>类型的集合,不是单个IBO对象。而List.Add()方法只能接收单个元素,强行把集合转成单个元素自然会报错。
正确解决方法
有两种简单的处理方式:
方法1:用AddRange()批量添加
List<T>.AddRange()方法专门用来一次性添加整个集合的元素,直接传入result.OfType<IBO>()即可:
var list = new List<IBO>(); var result = BOBase.Search(Mapper.SourceBrowserType, searchCriteria); list.AddRange(result.OfType<IBO>());
方法2:遍历集合逐个添加
如果需要在添加每个元素前做额外处理(比如校验、修改),可以遍历集合,逐个调用Add():
var list = new List<IBO>(); var result = BOBase.Search(Mapper.SourceBrowserType, searchCriteria); foreach (var iboItem in result.OfType<IBO>()) { // 这里可以加自定义处理逻辑,比如: // iboItem.SomeProperty = "updated"; list.Add(iboItem); }
内容的提问来源于stack exchange,提问作者vytaute
相关产品推荐
相关产品推荐

