我正在尝试使用linq
List<ScenarioDetailModel> chartScenarioDetailsList = new List<ScenarioDetailModel>();
List<ScenarioDetailModel> subList = new List<ScenarioDetailModel>();
subList = chartScenarioDetailsList.Where(s => s.Code == "C3");
chartScenarioDetailsList
和subList
属于同一类型,但编译器抱怨类型转换并且不会编译,错误如下:
错误190无法隐式转换类型&#39; System.Collections.Generic.IEnumerable&#39;到&#39; System.Collections.Generic.List&#39;。存在显式转换(您是否错过了演员?)
但是,当我将子列表的类型从List
更改为IEnumerable
时,它会进行编译:
IEnumerable<ScenarioDetailModel> subList = new List<ScenarioDetailModel>();
subList = chartScenarioDetailsList.Where(s => s.Code == "C3");
我的问题是:为什么会这样?
答案 0 :(得分:3)
Where()确实返回IEnumerable,而不是List。
尝试subList = chartScenarioDetailsList.Where(s => s.Code == "C3").ToList();
此外,您应该直接使用
分配subList chartScenarioDetailsList.Where(s => s.Code == "C3").ToList();
而不是new,因为这样做会丢失您对new的调用所创建的引用。
答案 1 :(得分:0)
"nearest"
但你真的应该接受var subList = chartScenarioDetailsList.FindAll(s => s.Code == "C3");
概念,正如其他人在评论和答案中所建议的那样:
IEnumerable
如果你对子列表的使用是立即和临时的,你可以完全跳过它,只是迭代// I temporarily need a local sub-list to do something
// Approach 1 (older list approach)
{ // scope of subList
var subList = chartScenarioDetailsList.FindAll(s => s.Code == "C3");
foreach (var detail in subList)
{ /* do a thing with detail */ }
} // end of scope
// Approach 2 (enumerable approach)
foreach (var detail in chartScenarioDetailsList.Where(s => s.Code == "C3"))
{ /* do a thing with detail */ }
结果。