什么是forloop的优化方式

时间:2018-04-12 07:21:34

标签: c# linq loops

For Loop 性能更好同样是编码标准

var totalCount = new List<int>();
  
      
  1. FOREACH
  2.   
 foreach(var student in StudentList)
 {
      var studentItem= student.DataContext as studentEntity;
      if (studentItem!= null)
      {
            totalCount.Add(studentItem.Id);
      }
 }                
  
      
  1. 的ForEach
  2.   
StudentList?.ForEach(student=>
{
    var studentItem= student.DataContext as studentEntity;
    if (studentItem!= null)
    {
        totalCount.Add(studentItem.Id);
    }
});

我的问题是快速性能哪个循环更正确

如果我的StudentList中有1000及以上的记录,我想要 在c#中执行逻辑操作然后ForLoop更好 快速性能

提前谢谢!!!

3 个答案:

答案 0 :(得分:3)

让.Net为你做,摆脱任何循环:

https://msdn.microsoft.com/en-us/library/z883w3dc(v=vs.110).aspx

 totalCount.AddRange(studentList);

它更具有可读性和(可能)更高效。

修改:如果totalCountstudentList 不同类型,请添加Select,例如:

totalCount.AddRange(studentList.Select(student => student.Id));

答案 1 :(得分:0)

在优化方面它们几乎相同,你可以查看Eric Lippert's blog: “foreach” vs “ForEach”,在那里他谈到这一点,并在内部显示forEach。

public static void ForEach<T>(this IEnumerable<T> sequence, Action<T> action)
{ 
  // argument null checking omitted
  foreach(T item in sequence) action(item);
}

答案 2 :(得分:0)

另一种用于从另一个列表创建列表的.NET(LINQ)方法(一个班轮粉丝的单行)

var totalCount = studentList.ToList();

另一种LINQ方法,当你已经存在项目时。

var totalCount = new List<int> { 1, 2 ,3 };

var all = totalCount.Concat(studentList).ToList();

不可能不坚持榜样,因为只有当你知道问题的背景时才能实现性能。

在您更新的示例中,可读性和足够快的方法可能是

 var totalCount = 
     StudentList.Select(student => student.DataContext as Entity)
                .Where(entity => entity != null)
                .Select(entity => entity.Id)
                .ToList();