列表是否与枚举器MoveNext方法类似?

时间:2016-03-01 22:07:16

标签: c# list

我正在构建一个程序,我从文件中读取并将文件的每一行放入对象列表中。

   List<DataRecord> vListOfRecords = new List<DataRecord>();

之前我做了同样的program但是我被指示将数据读入对象并将这些对象放入List&lt;&gt;中,不要问为什么请。这样我就可以对物品进行分类。

无论如何我正在尽我所能来模仿我提供的链接,但我找不到一种方法来设置一个布尔值到List.MoveNext()方法。那么有一个列表的方法可以做到这一点吗?

或者有没有办法打破这个我没有看到的循环?

    //Sort list by control vaiable.
        if (control == "1")
        {
            SortByAccount sortByAccount = new SortByAccount();
            vListOfRecords.Sort(sortByAccount);

            //set up control for account to switch
            var vAccount = string.Empty;

            foreach (DataRecord d in vListOfRecords)
            {


                do
                {
                    var vParseSettleMM = d.settleMM;
                    var vParseOpen = d.open;
                    var vParseBuy = d.buy;
                    var vParseSell = d.sell;

                    //adding temp variabels to sum
                    vSettleMMSum += vParseSettleMM;
                    vOpenSum += vParseOpen;
                    vBuySum += vParseBuy;
                    vSellSum += vParseSell;

                }
                //sets up when to loop
                while (vAccount == d.account);

                //After each Break need to print out Account name and sums from above.
                // Do printing here as part of the loop, at the very end of the loop code block.
                Console.WriteLine("--------------------------------------------------------");

                Console.WriteLine(vAccount + "  " + vSettleMMSum + "  " + vOpenSum + "   " + vBuySum + " " +
                    vSellSum);

                vWriteFile.WriteLine("{0},{1},{2},{3},{4}", vAccount, vOpenSum, vBuySum, vSellSum, vSettleMMSum);

                //reset sums for next loop
                vSettleMMSum = 0;
                vOpenSum = 0;
                vBuySum = 0;
                vSellSum = 0;
            }
        }

2 个答案:

答案 0 :(得分:0)

列表有一个底层的枚举器,您可以使用它来获取MoveNext方法:

List<Something> somelist = new List<Something>();

List<Something>.Enumerator enumerator = somelist.GetEnumerator();

enumerator.MoveNext()

答案 1 :(得分:0)

您无法按照要求的方式获得所需的结果(在foreach循环中使用MoveNext)

您有两个简单的选择:

  • 在for循环中处理列表并按索引访问项目(而不是foreach),这样你就可以嵌套两个for循环并随时中断(你的&#34; MoveNext&#34;将是index ++)
  • 使用linq对列表进行分组并对其进行分组处理

linq GroupBy的示例代码:

var grouped = vListOfRecords.GroupBy(x=>x.account);

foreach(var group in grouped)
{
    foreach(var record in group)
    {
        //your sums
    }
    // your group outputs
}

我会使用这种方法而不是前者。