编辑:我意识到我一直在以错误的方式解决这个问题,经过大修后,让它发挥作用。感谢提示小伙伴们,我会记住他们的未来。
我的程序遇到了一个不寻常的问题。我需要做的是找到两次之间的差异,除以1.5小时,然后返回开始时间,然后是每个1.5小时的开始时间增量。因此,如果时间是上午11:45 - 下午2:45,时差是三小时,3 / 1.5 = 2,然后返回上午11:45和下午1:15。目前,我可以做任何事情,除了返回不止一次。根据我的尝试,它返回初始时间(上午11:45),第一个增量(下午1:15)或结束时间(下午2:45)。到目前为止,我已经尝试了几种不同类型的for和do / while循环。我最接近的只是简单地连接开始时间和增加的时间,但是开始和结束时间可以在3到6个小时之间,所以这不是一个实用的方法。
我尝试过的最新事情:
int i = 0;
do{
i++;
//Start is the starting time, say 11:45 am
start = start.AddMinutes(90);
return start.ToShortTimeString();
} while (i < totalSessions); //totalSessions is the result of hours / 1.5
我在动态标签上调用该函数(也在for循环中):
z[i] = new Label();
z[i].Location = new Point(PointX, PointZ);
z[i].Name = "sessionTime_" + i;
z[i].Text = getPlayTimes(dt.Rows[i][1].ToString());
tabPage1.Controls.Add(z[i]);
z[i].BringToFront();
PointZ += z[i].Height;
我对c#很陌生,所以我想我只是误解了某些地方。
答案 0 :(得分:3)
我认为你正试图以错误的方式解决问题。创建一个集合,即List,而不是返回每个值,然后将每个结果推送到列表中,直到满足完成条件。
然后,返回整个数组作为返回值。通过这种方式,您将拥有一个不错的自包含功能,与其他逻辑没有交叉关注 - 它只执行一项小任务,但做得很好。
祝你好运!答案 1 :(得分:1)
确定您的确切用例有点困难,因为您还没有提供您正在使用的完整代码。但是,您可以使用yield return
功能执行所要求的操作:
public IEnumerable<string> GetPlayTimes()
{
int i = 0;
do
{
i++;
//Start is the starting time, say 11:45 am
start = start.AddMinutes(90);
yield return start.ToShortTimeString();
} while (i < totalSessions); //totalSessions is the result of hours / 1.5
}
然后像这样使用它:
foreach (var time in GetPlayTimes())
{
// Do something with time
}