我有一個函數傳遞給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);
}
我有一個函數傳遞給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);
}
這是因爲懶惰的評價。如果你試圖做一個ToList()
,該功能將評估和突破點會被擊中 - 即嘗試這樣做:
var bar = foo.Select(PlusTwo).ToList();
可枚舉懶惰評價。
這意味着只有在開始迭代結果之前,纔會調用您的函數。
如果添加:
for(var x in bar) ...
那麼你的函數將被調用。
如果您想立即獲得結果,請致電bar.ToArray()
或bar.ToList()
。這將內部遍歷枚舉來創建結果,這將確保函數被調用。
您正在使用LINQ已推遲執行。換句話說,直到你想要這個操作的結果它纔會執行。所以,如果你不得不對此做一些事情,它會執行。