直接来自`await`的AddRange

问题描述 投票:0回答:2

我目前正在从List<List<string>>返回一个列表(await getWorlds()),现在我正在循环遍历每个列表,并获得每个列表中的第一个条目。

我只是想知道是否有另一种方法我可以用Worlds或其他东西快速将所有这些直接添加到.AddRange中?

这是我的代码:

var worlds = await getWorlds();
foreach (var w in worlds)
{
    Worlds.Add(w[0]);
}

有什么方法可以将它缩短到更小的范围吗?像Worlds = worlds.AddRange([0]);或其他什么?我只想获得第一个条目[0]并将每个条目添加到Worlds。我只是想看看是否有更清晰的编写代码的方法。我没有找到任何例子。

c# async-await addrange
2个回答
3
投票

你可以这样做:

var worlds = await getWorlds();
Worlds.AddRange(worlds.Select(w => w[0]));

虽然我不明白为什么foreach如此糟糕。


2
投票

这不是你想要的,但是你可以这样做来添加所有子列表中的所有项目实例,而不仅仅是第一个...(这会将列表展平为单个项目列表)

var worlds = await getWorlds();
Worlds.AddRange(worlds.SelectMany(w=>w));
© www.soinside.com 2019 - 2024. All rights reserved.