使用OfType的foreach不会修改对象属性

时间:2014-09-24 05:56:47

标签: c# asp.net-mvc linq

此代码:

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 ......这可能与它有关吗?

1 个答案:

答案 0 :(得分:-1)

IEnumerable<T> 用于修改项目。它用于迭代项目。使用列表或数组(.ToList().ToArray())。