2014-09-24 23 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