将 linq 应用于列表时出错
Error on applying linq to List
我正在尝试使用 linq
从更大的列表创建子列表
List<ScenarioDetailModel> chartScenarioDetailsList = new List<ScenarioDetailModel>();
List<ScenarioDetailModel> subList = new List<ScenarioDetailModel>();
subList = chartScenarioDetailsList.Where(s => s.Code == "C3");
chartScenarioDetailsList
和subList
都是同一种类型,但是编译器报错类型转换,编译不通过,报错如下:
Error 190 Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'System.Collections.Generic.List'. An explicit conversion exists (are you missing a cast?)
但是,当我将子列表的类型从 List
更改为 IEnumerable
时它会编译:
IEnumerable<ScenarioDetailModel> subList = new List<ScenarioDetailModel>();
subList = chartScenarioDetailsList.Where(s => s.Code == "C3");
我的问题是:为什么会这样?
Where() return 一个 IEnumerable,而不是一个列表。
尝试subList = chartScenarioDetailsList.Where(s => s.Code == "C3").ToList();
此外,您应该直接使用
分配 subList
chartScenarioDetailsList.Where(s => s.Code == "C3").ToList();
而不是 new,因为这样做会丢失调用 new 创建的引用。
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 */ }
如果您对子列表的使用是即时的和临时的,您可以完全跳过它,只迭代 Where
结果。
我正在尝试使用 linq
List<ScenarioDetailModel> chartScenarioDetailsList = new List<ScenarioDetailModel>();
List<ScenarioDetailModel> subList = new List<ScenarioDetailModel>();
subList = chartScenarioDetailsList.Where(s => s.Code == "C3");
chartScenarioDetailsList
和subList
都是同一种类型,但是编译器报错类型转换,编译不通过,报错如下:
Error 190 Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'System.Collections.Generic.List'. An explicit conversion exists (are you missing a cast?)
但是,当我将子列表的类型从 List
更改为 IEnumerable
时它会编译:
IEnumerable<ScenarioDetailModel> subList = new List<ScenarioDetailModel>();
subList = chartScenarioDetailsList.Where(s => s.Code == "C3");
我的问题是:为什么会这样?
Where() return 一个 IEnumerable,而不是一个列表。
尝试subList = chartScenarioDetailsList.Where(s => s.Code == "C3").ToList();
此外,您应该直接使用
分配 subListchartScenarioDetailsList.Where(s => s.Code == "C3").ToList();
而不是 new,因为这样做会丢失调用 new 创建的引用。
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 */ }
如果您对子列表的使用是即时的和临时的,您可以完全跳过它,只迭代 Where
结果。