Похоже, вы пытаетесь "посетить станции вдоль commonLine
", начиная со станции from
.
Запущенный вами l oop является действительным началом с этой целью; вам нужна переменная для хранения станции, которую вы сейчас посещаете. Возможно, текущее имя переменной Final
немного смущает вас, потому что это не «конечная» станция линии, а та, которую вы сейчас посещаете.
Поэтому давайте назовем переменную currentStation
. Затем вы хотите go перейти к следующей станции, пока не найдете to
(и, следовательно, не узнаете направление), или пока не достигнете конца линии:
var currentStation = from;
while (currentStation != null)
{
if (currentStation == to)
{
return "next";
}
currentStation = commonLine.Next(currentStation);
}
Теперь это проверяет, является ли to
«впереди». Если это не так, вы можете приступить к проверке, можно ли его найти в другом направлении, снова начиная с from
:
currentStation = from;
while (currentStation != null)
{
if (currentStation == to)
{
return "previous";
}
currentStation = commonLine.Previous(currentStation);
}
Если этот l oop не находит to
либо, очевидно, to
не на линии. Относитесь к этому случаю в соответствии со своими предпочтениями.
Некоторые замечания:
- Указание направления как «следующий» или «предыдущий» может быть немного вводящим в заблуждение. Если это действительно направление линии, подумайте о чем-то вроде «вперед» и «назад», так как «следующий» и «предыдущий» действительно подразумевают прямые следующие / предыдущие элементы в списке.
- В то время как выше работает, я отмечаю, что ваш
Line
объект уже имеет станции в индексированном списке. Поэтому более простым способом достижения вашей цели может быть просто определить индексы станций from
и to
на commonLine
и сравнить, какая из них больше другой.