此代码:
foreach (var d in data.OfType<FtpData>().Where(fd => !string.IsNullOrEmpty(fd.LocalPath)))
{
d.LocalPath = Url.Content(d.LocalPath);
}
当循环结束时,如果我检查'data',LocalPath的值仍然是原始值,则它没有改变。为什么? OfType()是否创建了对象的副本?
循环正确执行 - 我可以在其中断点并查看属性值更改 - 但一旦退出循环,更改就会丢失。
更新:
如果我这样做:
var data2 = data.ToList();
并更改foreach以使用data2,然后它可以工作。我不太明白为什么,但是在调试器中查看'data'的实际类型是System.Linq.Enumerable.WhereSelectEnumerableIterator ......这可能与它有关吗?
答案 0 :(得分:-1)
IEnumerable<T>
不用于修改项目。它用于迭代项目。使用列表或数组(.ToList()
或.ToArray()
)。