Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
其中是Enumerable中的参数。C#中定义的Where方法?_C#_.net_Where Clause_Enumerable - Fatal编程技术网

其中是Enumerable中的参数。C#中定义的Where方法?

其中是Enumerable中的参数。C#中定义的Where方法?,c#,.net,where-clause,enumerable,C#,.net,Where Clause,Enumerable,我试图更详细地理解枚举.Where方法的使用。尽管我已经了解了很多细节,包括lambda表达式、委托、谓词等的使用,但有些事情对我来说毫无意义,我希望能得到任何帮助 首先,我指的是下面链接中的解释: 在上面的网页中,他们有以下代码示例: int[] numbers = { 0, 30, 20, 15, 90, 85, 40, 75 }; IEnumerable<int> query = numbers.Where((number, index) => number

我试图更详细地理解
枚举.Where
方法的使用。尽管我已经了解了很多细节,包括lambda表达式、委托、谓词等的使用,但有些事情对我来说毫无意义,我希望能得到任何帮助

首先,我指的是下面链接中的解释:

在上面的网页中,他们有以下代码示例:

int[] numbers = { 0, 30, 20, 15, 90, 85, 40, 75 };

IEnumerable<int> query =
    numbers.Where((number, index) => number <= index * 10);

foreach (int number in query)
{
    Console.WriteLine(number);
}
/*
 This code produces the following output:

 0
 20
 15
 40
*/
int[]数字={0,30,20,15,90,85,40,75};
IEnumerable查询=
数字。其中((数字,索引)=>数字
参数“number”和“index”定义在哪里?我知道Where中的“number”与foreach语句中的“number”不同

想象一下,代码看起来更像这样:

Index | Check
0     | 0 <= 0   (because 0 * 10 == 0)  result = true
1     | 30 <= 10 (because 1 * 10 == 10) result = false
2     | 20 <= 20 (because 2 * 10 == 20) result = true
3     | 15 <= 30 (because 3 * 10 == 30) result = true
4     | 90 <= 40 (because 4 * 10 == 40) result = false
5     | 85 <= 50 (because 5 * 10 == 50) result = false
6     | 40 <= 60 (because 6 * 10 == 60) result = true
7     | 75 <= 70 (because 7 * 10 == 70) result = false
public bool IsElementValid(整数编号,整数索引)
{
返回号码
参数“编号”和“索引”在哪里定义

它们是在编写
(number,index)=>…
(number,index)=>
时声明的。
(int number,int index)=>
的缩写。可以省略这些类型,因为它们可以从
的签名中推断出来

您正在调用的
的重载,其中
为:

public static IEnumerable<TSource> Where<TSource> (
    this IEnumerable<TSource> source, 
    Func<TSource,int,bool> predicate
);
或者甚至将两者重命名:

(a, b) => a <= b * 10
(a,b)=>a

参数“number”和“index”在哪里定义?我知道Where中的“number”与foreach语句中的“number”不同。number 2没有意义。您尝试将其更改为什么?将行更改为“numbers.Where”((myparameter,index)=>myparameter。可能在声明lambda时,代码中的其他地方已声明为
myparameter
?在尝试重命名索引时收到的确切错误消息是什么?
(number, b) => number <= b * 10
(a, b) => a <= b * 10
public static System.Collections.Generic.IEnumerable<TSource> Where<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,int,bool> predicate);
{ 0, 30, 20, 15, 90, 85, 40, 75 }
index 0 number  0:  0 <= 0 * 10 : true
index 1 number 30: 30 <= 1 * 10 : false
index 2 number 20: 20 <= 2 * 10 : true
index 3 number 15: 15 <= 3 * 10 : true
index 4 number 90: 90 <= 4 * 10 : false
index 5 number 85: 85 <= 5 * 10 : false
index 6 number 40: 40 <= 6 * 10 : true
index 7 number 75: 75 <= 7 * 10 : false