2010-11-16 44 views
2
var v = object.where(a => a.date > DateTime(2000,1,1,)); 
list = v.ToList(); 

好了,所以下面的代碼,我已經設置了在每行破發點。當我到達第一行時,我運行代碼(F5)直到它到達第二行。當我從第二行前進(F11)時,它返回到第一行。當我運行代碼(F5)時,它不會將其添加到第二行並引發錯誤。LINQ查詢ToList()演戲

是我的LINQ查詢錯誤,或者是別的不工作?我完全困惑。

+0

什麼是「對象」? – SLaks 2010-11-16 19:06:09

+0

我認爲你需要發佈一些實際的代碼。這個例子現在不應該編譯。 – 2010-11-16 19:06:41

+1

一些真實的代碼會很好。這個例子不完整,不能編譯。 – Femaref 2010-11-16 19:07:18

回答

3

由於延遲執行,第一行中的lambda表達式只會在第二行中迭代結果時執行。

此行爲是完全正確的。

Here是一個很好的解釋。

+0

這不會導致調試器跳到第一行。 – Femaref 2010-11-16 19:08:41

+0

@Femaref:你確定嗎? – SLaks 2010-11-16 19:08:59

+0

是。延遲執行是通過使用自定義迭代器的狀態機實現的(如果我記得Eric Lippert的博客是正確的)。使用'yield return'不會導致調試器跳轉到該行,因爲這意味着它會在代碼中的某處跳轉,完全忽略了控制流。 – Femaref 2010-11-16 19:11:37