C# “C”;无法分配字段,因为它是foreach迭代变量";
我想修剪CSV文件的列标题,下面的字段是一个包含标题名称的数组,我将在哪里放置trim()?我把它和foreach循环放在一起,但是VS告诉我“不能分配字段,因为它是foreach迭代变量”。我做错了什么C# “C”;无法分配字段,因为它是foreach迭代变量";,c#,foreach,C#,Foreach,我想修剪CSV文件的列标题,下面的字段是一个包含标题名称的数组,我将在哪里放置trim()?我把它和foreach循环放在一起,但是VS告诉我“不能分配字段,因为它是foreach迭代变量”。我做错了什么 while ((fields = csv.GetCSVLine()) != null) { if (header) { foreach (string field in fields) { //field = fi
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);
}
}
您正在尝试更改正在处理的项的值 照办
var trimmedField=field.Trim();
headers.Add(trimmedField);
您可以在与
Add()
调用相同的行上执行此操作。如果将Trim()
的结果直接传递给Add()
,则无需覆盖变量字段
在我看来,编译器已经确切地告诉了你做错了什么:你试图分配一个迭代变量,这显然是不允许的
这里的其他答案告诉了您可以做什么:要么将迭代变量复制到另一个变量中并对其进行修剪,要么完全跳过赋值,直接添加修剪后的值。尽管外观不太“现代”,在所描述的情况下,简单地使用For循环执行速度和资源友好性差不多,即:
while ((fields = csv.GetCSVLine()) != null) {
if (header) {
for(int ii = 0; ii < fields.Count; ii++) {
headers.Add(field);
} } }
while((fields=csv.GetCSVLine())!=null){
如果(标题){
for(int ii=0;ii
当然,我相信这个问题在几年前就解决了,但我只是把它放在那里,以帮助其他人浏览。我个人认为,不允许我们为foreach迭代器赋值有点愚蠢(我怀疑它们可以在编译和/或运行时轻松地克服这个障碍(比如它)。或者更简洁地说,可以使用headers.Add(field.Trim());同样合理,尤其是当你只使用一次修剪过的版本时。公平地说,编译器警告对你应该做的事情毫无帮助,而且MSDN文档也不太引人注目。但是,一旦你开始理解C#如何处理值和引用类型,这一切都有一定的意义。
foreach (string field in fields)
{
headers.Add(field.Trim());
}
while ((fields = csv.GetCSVLine()) != null) {
if (header) {
for(int ii = 0; ii < fields.Count; ii++) {
headers.Add(field);
} } }