我想修剪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);
}
}
答案 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>