C # "не может назначить поле, потому что это переменная foreach" - PullRequest
2 голосов
/ 27 июня 2009

Я хочу обрезать заголовки столбцов в CSV-файле, поля ниже - это массив, содержащий имена заголовков, куда бы я поместил trim ()? Я поместил его в цикл foreach, но VS говорит мне, что «не может назначить поле, потому что это переменная итерации foreach». Что я делаю не так?

while ((fields = csv.GetCSVLine()) != null) 
{
    if (header)
    {
        foreach (string field in fields) 
        {
              //field = field.trim(); //VS: "cannot assign field because it is a foreach iteration variable"
          headers.Add(field);
        }
}

Ответы [ 5 ]

9 голосов
/ 27 июня 2009

Вы можете сделать это на той же линии, что и вызов Add(). Нет необходимости перезаписывать переменную field, если вы передаете результат Trim() непосредственно в Add().

foreach (string field in fields) 
{
    headers.Add(field.Trim());
}
8 голосов
/ 27 июня 2009

Вы пытаетесь изменить значение предмета, над которым работаете.

Просто сделай

var trimmedField=field.Trim();
headers.Add(trimmedField);
3 голосов
/ 27 июня 2009

Мне кажется, что компилятор уже сказал вам точно, что вы делаете неправильно: вы пытаетесь присвоить что-то, что является итерационной переменной, что вам явно не разрешено делать.

Другие ответы здесь рассказывают, что вы можете сделать вместо этого: либо скопируйте переменную итерации в другую переменную и обрежьте ее, либо пропустите назначение и добавьте обрезанное значение напрямую.

3 голосов
/ 27 июня 2009
    foreach (string field in fields) 
    {
      headers.Add(field.Trim());
    }
1 голос
/ 21 декабря 2011

Несмотря на то, что внешний вид будет менее «современным», он, скорее всего, будет настолько быстрым и удобным для использования, чтобы просто использовать цикл For в описанном случае, т. Е .:

while ((fields = csv.GetCSVLine()) != null) {
    if (header) {
        for(int ii = 0; ii < fields.Count; ii++) {
            headers.Add(field);
}   }   }

Конечно, я уверен, что проблема была решена несколько лет назад, но я просто делаю это, чтобы помочь другим просматривать. Лично я думаю, что немного глупо, что нам не разрешено присваивать значения итераторам foreach (я подозреваю, что они могут легко покрыть препятствие (как оно есть) во время компиляции и / или выполнения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...