2014-09-24 44 views
1

此代码:的foreach与OfType不修改对象属性

foreach (var d in data.OfType<FtpData>().Where(fd => !string.IsNullOrEmpty(fd.LocalPath))) 
{ 
    d.LocalPath = Url.Content(d.LocalPath); 
} 

当,如果我检查“数据”的localPath的值仍然是原来的循环完成后,它并没有改变。为什么? OfType()是否创建对象的副本?

循环正确执行 - 我可以在它内部断点并查看属性值更改 - 但是一旦退出循环,更改就会丢失。

UPDATE:

如果我这样做:

var data2 = data.ToList(); 

,并切换到使用数据2代替,然后它工作在foreach。我不明白为什么,但是在调试器中查看'data'的实际类型是System.Linq.Enumerable.WhereSelectEnumerableIterator ...可能与它有关系吗?

+2

是'FtpData'类还是结构? – Caramiriel 2014-09-24 06:02:20

+1

我想你需要包括'数据'是如何声明和填充的,以便我们在这方面进一步提供帮助 – 2014-09-25 07:33:14

回答

-1

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

+1

这不适用于此,因为他没有修改集合,而是修改了一个元素。 – Dirk 2014-09-24 06:00:11

+1

OP正在修改集合中的元素..而不是集合本身。 – 2014-09-24 06:00:28

+0

@SimonWhitehead,你不能修改项目,迭代IEnumerable – MelnikovI 2014-09-24 06:03:19

相关问题