gpt4 book ai didi

c# - 为什么在 lambda 表达式中调用委托(delegate)函数时会保留参数 i ?

转载 作者:行者123 更新时间:2023-12-03 22:56:27 25 4
gpt4 key购买 nike

我有以下 C# 代码,我发现参数 i 的值被转移到 lambda 表达式委托(delegate)的下一次调用。

string[] arrayOne = {"One", "Two", "Three", "Three", "Three"};

string[] newArray = arrayOne.Where ((string n, int i)=> {return i++ <=2;} ).ToArray();
// newArray is {"One","Two", "Three"}

我的期望是每次调用委托(delegate)时都会传递一个新参数i。我知道由于闭包,lambda 表达式中使用的局部变量会在所有调用中保留,但这是一个参数。

问题:

为什么在对委托(delegate)的所有调用中都保留参数 i 的值?

最佳答案

有两个覆盖 linq where

public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate);
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

您调用时使用第二个参数int类型值表示您的数组索引。

public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate);

这将返回集合中索引值小于或等于 2 的值。

Where ((string n, int i)=> {return i++ <=2;})

但是i++没有任何意义,因为你离开了委托(delegate)函数作用域,自动增量i的值不会保留

关于c# - 为什么在 lambda 表达式中调用委托(delegate)函数时会保留参数 i ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52115407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com