簡體   English   中英

如何在c#中的while(true)循環中識別最后一次迭代

[英]How to identify last iteration in while(true) loop in c#

這是C#代碼..

while (true)
{                
    DateTime dtNext = start.AddMinutes(duration);
    if (start > end || dtNext > end)
        break;

    if (start < DateTime.Parse("12:00 PM"))
    {
        if (!doneMornHeader)
        {
            Label head = new Label();
            head.Text = string.Format(header, "Morning");
            this.Timediv.Controls.Add(head);
            doneMornHeader = true;
        }

        morning = start.ToShortTimeString() + "-" + dtNext.ToShortTimeString();

        Label lbl = new Label();
        lbl.ID = "ImpLabel" + k;
        lbl.Text = morning;

        CheckBox cb = new CheckBox();
        cb.ID = "ImpCheckbox" + k;

        this.Timediv.Controls.Add(new LiteralControl("<div class='task low'>"));
        this.Timediv.Controls.Add(new LiteralControl("<div class='desc'>"));
        this.Timediv.Controls.Add(new LiteralControl("<div class='title'>"));
        this.Timediv.Controls.Add(lbl);
        this.Timediv.Controls.Add(new LiteralControl("<div class='make-switch span5 pull-right' data-on='success'>"));
        this.Timediv.Controls.Add(cb);
        this.Timediv.Controls.Add(new LiteralControl("</div>"));
        this.Timediv.Controls.Add(new LiteralControl("</div>"));
        this.Timediv.Controls.Add(new LiteralControl("</div>"));
        this.Timediv.Controls.Add(new LiteralControl("</div>"));
        this.Timediv.Controls.Add(new LiteralControl("<br>"));            
        k++;
    }
    else
    {
        if (!doneAfternoonHeader)
        {
                    Label head = new Label();
                    head.Text = string.Format(header1, "Afternoon");
                    this.Timediv.Controls.Add(head);
                    doneAfternoonHeader = true;
        }
         afternon = start.ToShortTimeString() + "-" + dtNext.ToShortTimeString();
         Label lbl1 = new Label();
         lbl1.ID = "ImpLabel" + k;
         lbl1.Text = afternon;
         CheckBox cb1 = new CheckBox();
         cb1.ID = "ImpCheckbox" + k;
         this.Timediv.Controls.Add(new LiteralControl("<div class='task medium'>"));
         this.Timediv.Controls.Add(new LiteralControl("<div class='desc'>"));
         this.Timediv.Controls.Add(new LiteralControl("<div class='title'>"));
         this.Timediv.Controls.Add(lbl1);
         this.Timediv.Controls.Add(new LiteralControl("<div class='make-switch span5 pull-right' data-on='success'>"));
         this.Timediv.Controls.Add(cb1);
         this.Timediv.Controls.Add(new LiteralControl("</div>"));
         this.Timediv.Controls.Add(new LiteralControl("</div>"));
         this.Timediv.Controls.Add(new LiteralControl("</div>"));
         this.Timediv.Controls.Add(new LiteralControl("</div>"));
         this.Timediv.Controls.Add(new LiteralControl("<br>"));
         k++;
      }
     start = dtNext;                
}

現在我想找出while循環的最后一次迭代...

在最后一次迭代中,我想改變

this.Timediv.Controls.Add(new LiteralControl("<div class='task low'>"));

this.Timediv.Controls.Add(new LiteralControl("<div class='task low last'>"));

在if和else中

即在早上和下午的會議..

怎么能找到最后一次迭代?

這是你的最后一次迭代:

if (start > end || dtNext > end)
break;

另外,在你進入最后一次迭代之前,你可以引入一些小的檢查:

DateTime tempDtNext = start.AddMinutes(duration);
var tempStart = tempDtNext;
var isGoingToEnd = (tempStart > end || tempDtNext > end);
this.Timediv.Controls.Add(new LiteralControl(string.Format("<div class='task low {0}'>", isGoingToEnd ? "last" : string.Empty));

是否有理由在break之前無法添加控件? 這似乎是您退出循環的地方:

while(true)
{
     if (start > end || dtNext > end)
     {
         //add control
         this.Timediv.Controls.Add(new LiteralControl("<div class='task low last'>"));
         break;
     }

    //do stuff..
}

另外,如果你有一個可以終止循環的條件,為什么還要麻煩while(true)

它應該是:

while(start < end || dtNext < end)
{
    //...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM