Проблема в том, что вы используете And
, когда вам нужно использовать AndAlso
:
TimeBands.Count> 2 AndAlso dr.Field (Of Short) (fldStarttime)> = TimeBands (2) .StartTime (= cond1) И dr.Field (Of Short) (fldStarttime) <= TimeBands (2) .EndTime (= cond2) </p>
, поскольку And
и AndAlso
имеюттот же приоритет оператора , это оценивается слева направо следующим образом:
(TimeBands.Count> 2 AndAlso cond1) И cond2
And
не закорачивает, т. е. правая часть выражения (cond2) всегда вычисляется, что дает исключение, когда TimeBands.Count <= 2
.Измените все свои And
с на AndAlso
с, и все будет в порядке:
TimeBands.Count> 2 AndAlso cond1 AndAlso cond2
Альтернативой было бы поставить круглые скобки следующим образом:
TimeBands.Count> 2 AndAlso (cond1 И cond2)
но это просто потеря производительности.Поскольку cond1 и cond2 не имеют побочных эффектов, нет причин избегать короткого замыкания.По тем же причинам я рекомендую также изменить Or
s на вариант с коротким замыканием OrElse
.