将 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");

chartScenarioDetailsListsubList都是同一种类型,但是编译器报错类型转换,编译不通过,报错如下:

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 结果。