2012-12-27 117 views
1

可能重复:
C# Syntax - Example of a Lambda Expression - ForEach() over Generic List更改foreach循环拉姆达

我想简化我的代码,并改变它的东西更短,仍然可读的代码。

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(...)) 

任何其他建议?

回答

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

您将需要调用ToList()如果你想有一个列表。 – alexn

+0

刚刚看到,因为你张贴。谢谢。 :-) – IronMan84

3

关于如何:

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

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

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

或者你可以使用AddRange

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

你并不需要在这里一个foreach,选择会为你做的:

IEnumerable<string> = OnlineModels.Select(x => x.model_id.ToString()); 
3
var onlineModelsNumbers = OnlineModels.Select(m => m.model_id.ToString()) 
             .ToList(); 
0

只是变换,并将其添加为一个范围:

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

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

我想到写表达式如下:

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

这是一个相当差的做法,因为你造成,也依赖于功能风格调用的副作用。最好使用“AddRange”或“ToList”来避免这种情况。 – Servy