Вот ваш код:
foreach (string item in sArray)
{
item = "Some assignment.\r\n";
}
Вот грубое приближение того, что компилятор делает с этим:
using (var enumerator = sArray.GetEnumerator())
{
string item;
while (enumerator.MoveNext())
{
item = enumerator.Current;
// Your code gets put here
}
}
Считывается свойство IEnumerator<T>.Current
-только, но на самом деле это не имеет значения, поскольку вы пытаетесь присвоить локальной переменной item
новое значение.Проверка во время компиляции, которая не позволяет вам сделать это, в основном защищает вас от выполнения чего-то, что не будет работать так, как вы ожидаете (т.е. изменение локальной переменной и отсутствие влияния на базовую коллекцию / последовательность).
Если вы хотите изменить внутренние элементы индексированной коллекции, такие как string[]
, при перечислении, традиционный способ - использовать цикл for
вместо foreach
:
for (int i = 0; i < sArray.Length; ++i)
{
sArray[i] = "Some assignment.\r\n";
}