以相反的顺序启动foreach循环

时间:2014-01-14 13:37:06

标签: asp.net

public DataTable ReverseOrder(DataTable dTable, string colName)
{
        foreach (DataRow drow in dTable.Rows)
        {
            if (hTable.Contains(drow[colName]))
                duplicateList.Add(drow);
            else
                hTable.Add(drow[colName], string.Empty);
        }
}

我想以反向(降序)顺序开始每个循环。

5 个答案:

答案 0 :(得分:3)

您可以使用Enumerable.Reverse(如果这是您想要的):

public DataTable ReverseOrder(DataTable dTable, string colName)
{
    return dTable.AsEnumerable().Reverse().CopyToDataTable();
}

答案 1 :(得分:2)

试试这个

List<DataRow> rows = dTable.AsEnumerable().Reverse().ToList();
foreach (DataRow drow in rows)
{
    if (hTable.Contains(drow[colName]))
        duplicateList.Add(drow);
    else
        hTable.Add(drow[colName], string.Empty);
}

答案 2 :(得分:1)

对于(;;;)这样的情况来说很方便。我相信foreach不会工作。即使它工作,你需要很多解决方法。所以考虑for()循环的时间,因为它适用于索引。

在你的情况下

int count = dTable.Rows.Count;
for(int i=count-1;i<=0;i--)
{
  //logic
}

更新

蒂姆的回答远远超过我的说明。

答案 3 :(得分:0)

通过分析您的代码,看起来您最简单的答案是使用中间列表从foreach循环中收集结果,将其反转,然后将反向列表添加到“htable”中。 Foreach不能反向运行(尽管可以使用反向迭代的for循环)。

代码看起来像这样:

    public DataTable ReverseOrder(DataTable dTable, string colName)
    {
        List<DataRow> intermediateDuplicateList = new List<DataRow>();
        List<DataRow> intermediateHTableAddList = new List<DataRow>();
        foreach (DataRow drow in dTable.Rows)
        {
            if (hTable.Contains(drow[colName]))
                intermediateDuplicateList.Add(drow);
            else
                intermediateHTableAddList.Add(drow);
        }

        intermediateDuplicateList.Reverse();
        intermediateHTableAddList.Reverse();

        //appending the reversed list to dupelist.
        duplicateList.AddRange(intermediateDuplicateList);

        //iterating through a reversed list adding to hTable;
        foreach (DataRow d in intermediateHTableAddList)
        {
            hTable.Add(drow[colName], string.Empty);
        }
    }

答案 4 :(得分:0)

使用For-Next循环,For-Each不能反向运行:

Function ArraySum(Numbers As Variant)
    Summed = 0
    For Number = (Numbers.Rows.Count - 1) To 0 Step -1
        Summed = Summed + Numbers.Cells(Number + 1, 1)
    Next Number
    ArraySum = Summed
End Function