У меня есть ICollection<SomeClass>
.Самый простой способ получить «следующий» элемент в последовательности?
public class SomeClass
{
public string Text { get; set; }
public bool IsPreferred { get; set; }
}
Предметы в нем были предварительно заказаны, поэтому «следующий» что-то значит.
В моем случае содержимое последовательности выглядит следующим образом:
[0] - "а", ложные
[1] - "Ъ", истинный
[2] - "с", ложные
Я пытаюсь получить «следующий» элемент после того, который IsPreferred == true
. Итак, в приведенном выше, я хочу получить элемент 2, и я хочу очистить другое значение IsPreferred
.
Так я хочу закончить с этим:
[0] - "а", ложные
[1] - "Ъ", ложные
[2] - "c", true
В основном sh uffling предпочтительный предмет вниз.
Каков наилучший способ сделать это? Единственное, о чем я могу думать, это создать новый массив, добавить их один за другим, следить за индексом того, который является предпочтительным, а затем перехватить элемент в указанном выше индексе +1.
Любые лучшие идеи?
это работает, хотя ... вы получаете +1 от меня. Попробуйте @ TheEvilPengiun's one now ... – RPM1984
Мой код, вероятно, будет более эффективным, если у вас много предметов, но с современными ПК лучшие решения, как правило, наиболее читаемы. Если это будет иметь смысл, если вы снова взглянете на код через 6 месяцев, это лучшее решение. – TheEvilPenguin
@Marlon nice LINQ подход, но использование 'Skip' и' First' будет генерировать исключение, если следующий элемент не существует. Лучшим подходом было бы использовать: 'SomeClass b = x.ElementAtOrDefault (1);' тогда, если бы OP хотел изменить значения * только *, если следующий элемент существовал, поместите последние 2 строки назначения внутри этого условия: 'if (b! = null) {...}'. Конечно, вы упомянули об отсутствии проверки ошибок :) –