我是公司的新手,使用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.为什么bool?index不是布尔值,而是整数.我错过了什么?
在查看"数字"的定义时,我只看到了内容,但我无法理解为什么索引确实是字符串的索引.
这是因为使用过载Where.
index是lambda表达式中的一个参数 - lambda表达式被转换为a Func<string, int, bool>.
用于测试条件的每个源元素的函数; 函数的第二个参数表示源元素的索引.
参数值由调用委托的代码提供.
您无法随意决定lambda表达式有多少个参数 - 您必须提供一个lambda表达式,该表达式可以转换为指定为Wheremethod参数的委托类型.您可以只有一个参数(对于值)或两个(对于值和索引),因为该方法已重载.
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |