当我这样做:
currentPage = metadataResponse.ApplicationType.Pages.Find(
page => page.SortOrder == ++currentPage.SortOrder);
Run Code Online (Sandbox Code Playgroud)
值为currentPagenull.
但是同样的逻辑,当我将增量值赋给一个整数变量,然后尝试得到 currentPage
int sortOrder = ++currentPage.SortOrder;
currentPage = metadataResponse.ApplicationType.Pages.Find(
page => page.SortOrder == sortOrder);
Run Code Online (Sandbox Code Playgroud)
currentPage 得到人口.
对于为什么一个有效而另一个无效,有没有人有一个很好的答案?
注意:我假设Find方法应用于值集合.
在第一个代码示例中,您正在currentPage为集合中的每个元素递增(这是因为lambda表达式引入了从外部作用域捕获的变量的闭包 - 请参阅下面的代码块以获取更多信息).在第二个代码示例中,currentPage仅增加一次.看看以下程序的行为:
class Program
{
static void Main(string[] args)
{
Func1();
Console.WriteLine("\n");
Func2();
Console.ReadKey();
}
private static void Func1()
{
int i = 0;
var list = new List<int> { 1, 2, 3 };
list.ForEach(x => Console.WriteLine(++i));
}
private static void Func2()
{
int i = 0;
int j = ++i;
var list = new List<int> { 1, 2, 3 };
list.ForEach(x => Console.WriteLine(j));
}
}
Run Code Online (Sandbox Code Playgroud)
以下是有关lambda表达式中闭包的更多信息.玩得开心!;-)
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |