我有一个对象集合,我需要迭代并执行某些操作。目前看来很简单。但是,我有一些使它相当复杂的条件。具有多个逻辑条件的foreach循环
下面是一些信息:
的集合,包含了一些具有行星相位次“行星”对象的。
如果两个阶段之间的时间间隔小于或等于30分钟,则行星观看时间将组合为块。
例如,这里是6周阶段时间:
- 阶段1:上午8:00 - 上午9:30
- 阶段2:上午10点 - 上午11点
- 阶段3: 11:20 AM - 12:30 PM
- 阶段4:下午2:00 - 下午4:00
- 阶段5:下午6:30 - 下午7:30
- 阶段6:下午7:45 - 下午9:00
利用上述数据,我们有以下的块:通过3阶段1
- 相:一个连续观看块
- 阶段4:单独观察块
- 阶段5和第6阶段:一个continuuous观看块
数学:
- (阶段2开始时间) - (第1阶段结束时间)=30分钟
- (第3阶段开始时间) - (第2阶段结束时刻)=20分钟
- (第4阶段开始时间) - (第3阶段结束的时间)=90分钟
- (第5阶段开始时间) - (第4阶段结束时刻)=150分钟
- (相位6开始时间) - (结束时间相5)=15分钟
到目前为止我的失败尝试:
int i = 0;
bool continueBlocking = false;
foreach (var p in GalaxySector) //IEnumerable
{
//ensure that dates are not null
if (p.StartDatePhase != null || p.EndDatePhase != null) {
if (continueBlocking) {
string planetName = p.Name;
string planetCatalogId = p.CatalogId;
datetime? StartPhase = p.StartDatePhase.Value;
datetime? EndPhase = p.EndDatePhase.Value;
} else {
string planetName = p.Name;
string planetCatalogId = p.CatalogId;
datetime? StartPhase = p.StartDatePhase.Value;
datetime? EndPhase = p.EndDatePhase.Value;
}
if (i < 2) {
continue;
}
TimeSpan? spanBetweenSections = StartPhase - EndPhase;
if (spanBetweenSections.Value.TotalMinues <= 30) {
continueBlocking = true;
continue;
} else {
CreateSchedule(planetName, planetCatalogId, StartPhase, EndPhase);
continueBlocking = false;
}
}
i++;
}
我在这个愚蠢的循环上花了几个小时,我认为另一组眼睛会做得很好。
感觉/看起来太复杂,过于老式,太混乱。有没有更好/现代的做法?
谢谢!
执行阶段圈午夜后回来?换句话说,'早上12:15 - 凌晨2:30'和晚上10点 - 晚上11:50是否构成一次观看? – dasblinkenlight
If continueBlocking do X,else do X. X = X.那么为什么你使用continueBlocking? – Berkay
你是否研究过使用case语句而不是多个if语句? – tCoe