Я хочу сделать копию IEnumerable<T>
, в которой один элемент по данному индексу был заменен заданным значением.Копировать IEnumerable, заменяя элемент
я определил следующий метод, который делает то, что я хочу:
public static IEnumerable<T> ReplaceAt<T>(this IEnumerable<T> source, T item, int index)
{
foreach (T before in source.Take(index))
{
yield return before;
}
yield return item;
foreach (T after in source.Skip(index + 1))
{
yield return after;
}
}
Однако, в то время как, возможно, легко понять это кажется «неэффективным», чтобы создать два итератора, один из которых пропускает элементы, которые уже приняты первый итератор.
Есть ли лучший способ определить это?
Ну, ярмарка. Этот ответ раньше, чем мой :) – tym32167
@ tym32167 Едва ли, но я все равно оставил ваш ответ. ;) –