protected override bool MoveNextCore(ref Pair<double, long> currentElement)
{
// The temporary result contains the running sum and count, respectively.
double sum = 0.0;
long count = 0;
QueryOperatorEnumerator<double?, TKey> source = m_source;
double? current = default(double?);
TKey keyUnused = default(TKey);
int i = 0;
while (source.MoveNext(ref current, ref keyUnused))
{
if (current.HasValue)
{
if ((i++ & CancellationState.POLL_INTERVAL) == 0)
CancellationState.ThrowIfCanceled(m_cancellationToken);
sum += current.GetValueOrDefault();
count++;
}
}
currentElement = new Pair<double, long>(sum, count);
return count > 0;
}