C#newbie:如何知道lambda表达式中变量的含义

Dom*_*que 2 c# lambda

我是公司的新手,使用C#(我用过其他语言),我刚刚在代码中遇到了一个Lambda表达式,所以我试图理解它是如何工作的,但微软网站解释远非明确:

static void Main(string[] args)  
{  
    string[] digits = { "zero", "one", "two", "three", "four", "five",   
            "six", "seven", "eight", "nine" };  

    Console.WriteLine("Example that uses a lambda expression:");  
    var shortDigits = digits.Where((digit, index) => digit.Length < index);  
    foreach (var sD in shortDigits)  
    {  
        Console.WriteLine(sD);  
    }  
}
Run Code Online (Sandbox Code Playgroud)

在查看"数字"的定义时,我只看到了内容,但我无法理解为什么index确实是字符串的索引.让我通过用以下内容替换该变量的名称来解释我的意思something:

static void Main(string[] args)  
{  
    string[] digits = { "zero", "one", "two", "three", "four", "five",   
            "six", "seven", "eight", "nine" };  

    Console.WriteLine("Example that uses a lambda expression:");  
    var shortDigits = digits.Where((digit, something) => digit.Length < something);  
    foreach (var sD in shortDigits)  
    {  
        Console.WriteLine(sD);  
    }  
}
Run Code Online (Sandbox Code Playgroud)

=>我怎么知道something索引的含义而不是另一个属性strings[]

相关问题:我可以在这个变量列表中添加更多(为什么/为什么不添加)?

static void Main(string[] args)  
{  
    string[] digits = { "zero", "one", "two", "three", "four", "five",   
            "six", "seven", "eight", "nine" };  

    Console.WriteLine("Example that uses a lambda expression:");  
    var shortDigits = digits.Where((digit, var1, var2, ...) => digit.Length < var1);  
    foreach (var sD in shortDigits)  
    {  
        Console.WriteLine(sD);  
    }  
}
Run Code Online (Sandbox Code Playgroud)

=>这似乎没有编译,有一个语法错误,有以下消息:Delete 'Func<string,bool>' does not take 3 arguments.为什么boolindex不是布尔值,而是整数.我错过了什么?

Jon*_*eet 8

在查看"数字"的定义时,我只看到了内容,但我无法理解为什么索引确实是字符串的索引.

这是因为使用过载Where.

index是lambda表达式中的一个参数 - lambda表达式被转换为a Func<string, int, bool>.

这个重载Where文档,predicate参数:

用于测试条件的每个源元素的函数; 函数的第二个参数表示源元素的索引.

参数值由调用委托的代码提供.

您无法随意决定lambda表达式有多少个参数 - 您必须提供一个lambda表达式,该表达式可以转换为指定为Wheremethod参数的委托类型.您可以只有一个参数(对于值)或两个(对于值和索引),因为该方法已重载.