Как уже говорили другие люди, если IEnumerable является чем-то конкретным, таким как Список или Коллекция, Набор и т. Д., То вы можете сделать это без размышлений - просто приведите его к этому типу и связывайтесь с ним.
Что если IEnumerable генерируется с использованием итератора, например:
public IEnumerable<int> EvenNumbers
{
get
{
int i = 2;
while (true)
{
yield return i;
i += 2;
}
}
}
Как вы могли бы достичь этого и заменить какое-то значение?Нет значений для замены - следующее значение получается из следующей оценки цикла.Там нет полной оценки этого перечисляемого в памяти где-либо, вы должны продолжать запрашивать следующее значение, пока не получите то, что искали.
Так что нет, вы не можете гарантировать, что для всех IEnumerables вы можете копатьв и изменить базовые значения, потому что иногда нет базовых значений.