Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
C#新手:如何知道lambda表达式中变量的含义_C#_Variables_Lambda - Fatal编程技术网

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

C#新手:如何知道lambda表达式中变量的含义,c#,variables,lambda,C#,Variables,Lambda,我是一家公司的新员工,使用C#(我习惯于使用其他语言),我在代码中遇到了一个Lambda表达式,所以我试图理解它是如何工作的,但对它的解释还很不清楚: static void Main(string[] args) { string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }; Console.

我是一家公司的新员工,使用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);  
    }  
}
=>我怎么知道
某物的含义是
字符串[]
的索引而不是另一个属性

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

static void Main(字符串[]args)
{  
字符串[]位={“零”、“一”、“二”、“三”、“四”、“五”,
“六”、“七”、“八”、“九”};
WriteLine(“使用lambda表达式的示例:”);
var shortDigits=数字。其中((数字,var1,var2,…)=>数字。长度
=>这似乎无法编译,出现语法错误,并显示以下消息:
Delete'Func'不接受3个参数
。为什么
bool
<代码>索引
不是布尔值,而是整数。我错过了什么

当看“数字”的定义时,我只看到了内容,但我不明白为什么索引实际上是字符串的索引

这是因为使用的
Where
过载

index
是lambda表达式中的一个参数-lambda表达式正在转换为
Func

在中,
谓词
参数:

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

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


您不能任意决定lambda表达式有多少个参数-您必须提供一个lambda表达式,该表达式可以转换为指定为
Where
方法参数的委托类型。因为方法重载,所以只能有一个参数(用于值)或两个参数(用于值和索引)。

您不能添加更多参数,因为LINQ方法
其中
对它可以接受的函数类型有一个确切的定义。您了解扩展方法和重载吗?因为你们需要理解这里是什么,你们可以看到它的定义。
Where
子句接受属于扩展方法的表达式参数。@Damien\u不信者:我确实不知道扩展方法。这已经解释了很多。谢谢你的快速回答。然而,在验证了更多之后,我仍然有一个问题:函数
Where
似乎已添加到
string[]
。经过一些测试,我知道它也被添加到了其他数组中(比如
int[]
),但是当我尝试将它应用到其他类/对象时,它似乎不起作用。我如何/在哪里可以找到可以应用
Where
扩展方法的类/类型列表?@Dominique:听起来你现在需要做的是在LINQ上阅读。这个话题太大了,不能只在评论中讨论,甚至不能在一个单一的问题/答案中讨论。谢谢。至少我有一个寻找信息的起点。
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);  
    }  
}
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);  
    }  
}