如何将嵌套集合中的元素添加到列表

本文关键字:添加 列表 string 元素 嵌套 集合 | 更新日期: 2023-09-27 18:02:17

我有JSON,写为:

{"Groups":[{
"UniqueId": "Group-1",
"Title": "",
"Subtitle": "",
"ImagePath": "",
"Description" : "",
"Items":
[
  {
    "UniqueId": "",
    "Title": "",
    "Subtitle": "",
    "ImagePath": "",
    "Description" : "",
    "Content" : ""
  }]}]}

我可以使用以下代码从Groups添加Title:

List<string> titles = new List<string>();
if (this._groups.Count != 0)
{
    titles.AddRange(_sampleDataSource.Groups.Select(x => x.Title));
}

但是我也想从项目中添加Title,我无法这样做。我尝试了以下代码:

List<string> titles = new List<string>();
if (this._groups.Count != 0)
{
    titles.AddRange(_sampleDataSource.Groups.Select(x => x.Items.Select(y => y.Title)));
}

如何将嵌套集合中的元素添加到列表<string>

使用SelectMany平整化列表:

titles.AddRange(_sampleDataSource.Groups.SelectMany(x => x.Items.Select(y => y.Title)));

你所做的,是创建一个内部有可枚举对象的可枚举对象(形象地说:列表的列表),所以结果类型是IEnumerable<IEnumerable<string>>,这不是AddRange所期望的(IEnumerable<string>)。

SelectMany接受一个"列表的列表",并创建一个包含所有这些列表元素的"列表"(更严格地说,它们是IEnumerable的实例,而不是List<T>,这听起来更容易)。