将foreach循环更改为lambda

时间:2012-12-27 14:46:58

标签: c# linq lambda

  

可能重复:
  C# Syntax - Example of a Lambda Expression - 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(...))

还有其他建议吗?

8 个答案:

答案 0 :(得分:5)

List<string> onlineModelsNumbers = OnlineModels.Select(om => om.model_id.ToString()).ToList();

答案 1 :(得分:3)

怎么样:

onlineModelsNumbers.AddRange(OnlineModels.Select(o => o.model_id.ToString());

答案 2 :(得分:3)

var onlineModelsNumbers = OnlineModels.Select(m => m.model_id.ToString())
                                      .ToList();

答案 3 :(得分:0)

LINQ purposely does not come with a ForEach extension(以便LINQ函数保持纯粹)但是编写自己的foreach很容易。

答案 4 :(得分:0)

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

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

或者您可以使用AddRange

onlineModelNumbers.AddRange(OnlineModels.Select(om => om.model_id.ToString()));

答案 5 :(得分:0)

这里你不需要foreach,select会为你做这个:

IEnumerable<string> = OnlineModels.Select(x => x.model_id.ToString());

答案 6 :(得分:0)

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

List<string> onlineModelsNumbers = new List<string>(OnlineModels.Select(om => om.model_id.ToString()));

答案 7 :(得分:0)

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

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

onlineModels.ForEach(om => onlineModelsNumbers.Add(om.model_id.ToString()))