2014-08-06 2 views
1

Я контролирую мощность лазера, и я хочу знать, когда n последовательных измерений находятся за пределами безопасного диапазона. У меня есть Queue(Of Double), который имеет n элементов (2 в моем примере) во время проверки. Я хочу проверить, что все элементов в очереди удовлетворяют условию, поэтому я передаю предметы через Count() с предикатом. Однако функция count всегда возвращает количество элементов в очереди, даже если они не все удовлетворяют предикату.Enumerable.Count не работает

ElseIf _consecutiveMeasurements.AsEnumerable().Count(Function(m) m <= Me.CriticalLowLevel) = ConsecutiveCount Then 
    _ownedISetInstrument.Disable() 
    ' do other things 

Вид отладчик с выполнением перемещения в If.

enter image description here

Очевидно, что существуют два измерения в очереди, и оба они больше, чем CriticalLowLevel, так что счетчик должен быть равен нулю. Я сначала попробовал Enumerable.Where(predicate).Count(), и получил тот же результат. Что происходит?

Edit:

Конечно значения находятся ниже CriticalLowLevel, который я ошибочно установлен в 598 вместо 498 для тестирования. Я слишком усложнил проблему, сосредоточив свое внимание на коде, когда это был мой тестовый пример, который был ошибочным. Наверное, я не мог видеть лес для деревьев, поэтому они говорят. Спасибо Эрику за это.

+0

Я думаю, что вы допустили ошибку в своем тексте - не следует, чтобы третья в последней строке говорила ', и они оба меньше, чем CriticalLowLevel' ?? – Grim

ответ

2

Основываясь на вашем снимке отладки, похоже, что оба ваших измерения меньше критического уровня 598.0, поэтому я ожидаю, что счетчик будет соответствовать длине очереди.

Обе точки данных: < = Me.CriticalLowLevel.

Можете ли вы поделиться примером, где одна из точек данных> Me.CriticalLowLevel, которая все еще демонстрирует это поведение?

+0

Ну, я думаю, я пропустил что-то простое ... До! – djv

+1

Бывает у нас :-) –