void MoveToNextTick(bool forward) { if (forward) { if (Value == Maximum) { return; } } else { if (Value == Minimum) { return; } } if (Ticks != null && Ticks.Count != 0) { double closest; double distance; double distance_from_closest; if (Ticks.Contains(Value)) { closest = double.NaN; distance_from_closest = double.PositiveInfinity; for (int tick_index = 0; tick_index < Ticks.Count; tick_index++) { double tick = Ticks [tick_index]; if (forward) { if (tick > Value) { distance = tick - Value; } else { continue; } } else { if (tick < Value) { distance = Value - tick; } else { continue; } } if (distance < distance_from_closest) { closest = tick; distance_from_closest = distance; } } } else { closest = Ticks [forward ? 0 : Ticks.Count - 1]; distance_from_closest = Math.Abs(Value - closest); for (int tick_index = 1; tick_index < Ticks.Count; tick_index++) { double tick = Ticks [forward ? tick_index : Ticks.Count - tick_index]; distance = Math.Abs(Value - tick); if (distance < distance_from_closest) { closest = tick; distance_from_closest = distance; } } } if (!double.IsNaN(closest)) { Value = closest; } } else if (TickFrequency != 0) { double value = ((int)Math.Floor(Value / TickFrequency) + (forward ? 1 : -1)) * TickFrequency; if (value < Minimum) { value = Minimum; } if (value > Maximum) { value = Maximum; } Value = value; } }
public bool Contains(TTick item) => Ticks.Contains(item);