如何更改以下&#34; ForEach循环&#34;进入简单的IList <记录>或任何其他集合?

时间:2015-08-05 21:51:38

标签: c# .net winforms performance foreach

  1. 以下代码中的Foreach循环花费了更多时间用于50,00,000条记录。

  2. 相反,我需要更改并将其分配给一个简单的List或Ienumerable集合以查找Distinct集合。

  3. 我的问题是如何将下面的ForEach循环转换为List<Records>或任何其他集合(不使用循环)。我添加了我的编码结构。请帮我解决。 //请参阅CODE中的评论。

    Class MainFilter
    {
    
      Private Void GetRecords()
      {
        List<object> choices = new List<Object>();
    
        // Instead of the below line can I get the FilterItems implicitly converted.
        // I need a collection without ForeachLoop...something like the below.
        // List<Record> recordsCollection = table.FilterItems; Please help.
        // Foreach loop is taking more time I need this to be converted to 
        // simple collection using IList or Enumerable
    
        foreach (Record rec in table.FilterItems)
        {
          Choices.Add(rec.GetValue());
        }
    
      }
    
    }
    
    Public Class SecondTable: IContainerElement, IDisposable
    {
    
      public ThirdFilterItems FilterItems
      {
        get
        {
          _filteredRecords = new ThirdFilterItems(this);
        }
      }
    
    }
    
    public class ThirdFilterItems: FourthFilterItems
    {
    
      internal ThirdFilterItems(SecondTable table) : base(table)
      {
      }
    
    }
    
    public class FourthFilterItems: IList, IDisposable
    {
    
      public Record this[int index]
      {
        get
        {
          return record;
        }
      }
    
    }
    

2 个答案:

答案 0 :(得分:0)

以下内容将为您提供一系列的选择&#34;没有迭代集合。

table.FilterItems.Select(x => x.GetValue())

这就是你要找的东西吗?它不是一个清单。如果您需要将其转换为列表,则必须迭代集合才能执行此操作。

答案 1 :(得分:0)

你可以使用Linq:

来做到这一点
List<Record> recordsCollection = table.FilterItems
                                      .Select(r => r.GetValue())
                                      .ToList();

但是不要期望它更快......在内部,它仍然与原始代码完全相同。如果没有循环,或者循环的道德等价物,就没有办法解决这个问题。