C#'继续'无法按预期运行

时间:2016-09-15 14:05:52

标签: c# foreach continue

我有以下代码

    private void bgwSendMail_DoWork(object sender, DoWorkEventArgs e)
    {
        DataSet ds = getMailToSend();
        DataTable table = ds.Tables[0];
        {
            foreach (DataRow row in table.Rows)
            {
                {
                    string attachment1 = ds.Tables[0].Rows[0]["Attachment1"].ToString();
                    string attachment2 = ds.Tables[0].Rows[0]["Attachment2"].ToString();
                    string attachment3 = ds.Tables[0].Rows[0]["Attachment3"].ToString();
                    string attachment4 = ds.Tables[0].Rows[0]["Attachment4"].ToString();
                    string mailTo = ds.Tables[0].Rows[0]["EmailTo"].ToString();
                    string mailSubject = ds.Tables[0].Rows[0]["EmailSubject"].ToString();
                    string mailBody= ds.Tables[0].Rows[0]["EmailBody"].ToString();
                    string uid = ds.Tables[0].Rows[0]["uid"].ToString();

                    if (String.IsNullOrEmpty(attachment1))
                    {
                        //TODO Send Email Straight away ignore rest

                    }
                    else
                    {
                        if (!String.IsNullOrEmpty(attachment1))
                        {
                            bool attachment1Exists = checkFileExists(attachment1);
                            if (attachment1Exists == false)
                            {

                                continue;
                            }
                        }

现在我希望,当我们在底部点击继续(确实被击中)时,我们应该退回到foreach,如下所示,然后转到数据集中的下一条记录

enter image description here

这种情况不会发生,它会一遍又一遍地重复相同的记录,这是正常的吗?

如果这是正常的,一旦退出一次,foreach在数据表中忽略该行的最佳方法是什么?

2 个答案:

答案 0 :(得分:6)

continue正在按预期工作。

您正在枚举表中的所有行,但您没有使用它。相反,您总是访问表格中的第一行:

DataTable table = ds.Tables[0];
foreach(DataRow row in table.Rows)
{
    string attachment1 = ds.Tables[0].Rows[0]["Attachment1"].ToString();
    // ...
}

您始终可以访问ds.Tables[0].Rows[0]

相反,您应该使用此代码:

foreach(DataRow row in table.Rows)
{
    string attachment1 = row["Attachment1"].ToString();
    // ...
}

所以你实际上按照预期枚举了表中的所有行,它不是一个无限循环,但你没有使用表中的每一行而只是第一行。

答案 1 :(得分:4)

更改

>>> print(a1 + a2 + a3) 60

string attachment1 = ds.Tables[0].Rows[0]["Attachment1"].ToString();

以及对DataRow的所有其他后续引用。