1

可能重复:
C# 语法 - Lambda 表达式示例 - ForEach() over Generic List

我想简化我的代码并将其更改为更短且仍然可读的代码。

List<string> onlineModelsNumbers = new List<string>();

foreach (OnlineModel om in OnlineModels)
    onlineModelsNumbers.Add(om.model_id.ToString());

在这里,我正在考虑在 lambda 表达式中编写相同的内容。但是我该怎么做呢?

List<string> onlineModelsNumbersL = onlineModelsNumbers.ForEach(...)

或者

List<string> onlineModelsNumbersL = new List<string>(onlineModelsNumbers.ForEach(...))

还有其他建议吗?

4

8 回答 8

5
List<string> onlineModelsNumbers = OnlineModels.Select(om => om.model_id.ToString()).ToList();
于 2012-12-27T14:48:48.197 回答
3

怎么样:

onlineModelsNumbers.AddRange(OnlineModels.Select(o => o.model_id.ToString());
于 2012-12-27T14:48:52.363 回答
3
var onlineModelsNumbers = OnlineModels.Select(m => m.model_id.ToString())
                                      .ToList();
于 2012-12-27T14:49:23.183 回答
0

LINQ故意不附带ForEach扩展名(以便 LINQ 函数保持纯粹),但很容易编写自己的foreach.

于 2012-12-27T14:48:33.800 回答
0

您的代码已经很简单了。您可以考虑使用隐式类型的循环变量:

foreach(var om in OnlineModels)
{
    onlineModelNumbers.Add(om.model_id.ToString());
}

或者你可以使用AddRange

onlineModelNumbers.AddRange(OnlineModels.Select(om => om.model_id.ToString()));
于 2012-12-27T14:49:01.570 回答
0

您在这里不需要 foreach,select 将为您完成:

IEnumerable<string> = OnlineModels.Select(x => x.model_id.ToString());
于 2012-12-27T14:49:16.430 回答
0

只需转换并将其添加为范围:

List<string> onlineModelsNumbers = new List<string>(OnlineModels.Select(om => om.model_id.ToString()));
于 2012-12-27T14:49:51.127 回答
0

您希望对 OnlineModels 的每个成员执行“foreach”,因此希望将模型的 model_id 字符串表示形式添加到 onlineModelsNumbers。

我希望将表达式编写如下:

onlineModels.ForEach(om => onlineModelsNumbers.Add(om.model_id.ToString()))
于 2012-12-27T14:51:58.353 回答