2013-05-30 89 views
3

我有一個函數傳遞給Select。但是當我在上述函數中放置一個斷點時,程序不會中斷。打破函數傳遞給LINQ函數

實施例:

public static int PlusTwo(int x) 
{ 
    return x + 2; 
} 

public static void Main(string[] args) 
{ 
    var foo = new[] { 2, 3, 5, 7 }; 
    var bar = foo.Select(PlusTwo); 
} 

回答

9

這是因爲懶惰的評價。如果你試圖做一個ToList(),該功能將評估和突破點會被擊中 - 即嘗試這樣做:

var bar = foo.Select(PlusTwo).ToList(); 
6

可枚舉懶惰評價。

這意味着只有在開始迭代結果之前,纔會調用您的函數。

如果添加:

for(var x in bar) ... 

那麼你的函數將被調用。

如果您想立即獲得結果,請致電bar.ToArray()bar.ToList()。這將內部遍歷枚舉來創建結果,這將確保函數被調用。

1

您正在使用LINQ已推遲執行。換句話說,直到你想要這個操作的結果它纔會執行。所以,如果你不得不對此做一些事情,它會執行。