C#“无法分配字段,因为它是foreach迭代变量”

时间:2009-06-26 23:15:04

标签: c# foreach

我想修剪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 个答案:

答案 0 :(得分:9)

您可以在与Add()电话相同的一行进行此操作。如果将field的结果直接传递给Trim(),则无需覆盖变量Add()

foreach (string field in fields) 
{
    headers.Add(field.Trim());
}

答案 1 :(得分:8)

您正在尝试更改正在处理的项目的值。

只做

var trimmedField=field.Trim();
headers.Add(trimmedField);

答案 2 :(得分:3)

    foreach (string field in fields) 
    {
      headers.Add(field.Trim());
    }

答案 3 :(得分:3)

在我看来,编译器已经准确地告诉了你你做错了什么:你正试图分配一个迭代变量的东西,你显然不允许这样做。

这里的其他答案告诉你你可以做什么:要么将迭代变量复制到另一个变量并修剪它,要么完全跳过赋值并直接添加修剪后的值。

答案 4 :(得分:1)

虽然外观不那么“现代”,但在所描述的情况下简单地使用 For 循环,执行速度和资源友好性可能很快,即:

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

当然,我相信这个问题在几年前已经解决了,但我只是把它放在那里帮助其他人浏览。我个人认为这有点傻我们不允许为foreach迭代器赋值(我怀疑他们可以在编译和/或运行时轻松覆盖障碍(例如它))。 / p>