【发布时间】:2020-05-27 10:40:54
【问题描述】:
我还在熟悉委托和 lambda,我没有使用 LINQ,而且我也是今天才发现 ConvertAll 函数,所以我正在试验并询问它以加强我的理解。
我的任务是确定一串数字是偶数还是奇数。因此,首先,将字符串列表转换为 int 列表,然后从那里转换为 bool 列表。尽管代码很臃肿,但我想知道是否可以将所有内容集中在一行上并减少对额外 for 循环的需求。
string numbers = "2 4 7 8 10";
List<bool> evenBools = new List<bool>(Array.ConvertAll(numbers.Split(' '), (x = Convert.Int32) => x % 2 == 0))
预期结果是 [true, true, false, true, true]。显然代码不起作用。
我了解Array.ConvertAll) 的第二个参数需要进行对话。从字符串到整数,就是Convert.ToInt32。是否可以即时执行此操作(即在 lambda 表达式的左侧),以便我可以继续进行 bool 转换并在右侧返回?
【问题讨论】:
-
"(即在 lambda 表达式的左侧)" -
=>的左侧只是 永远 参数列表,可能在括号中,可能使用隐式类型。目前尚不清楚您对x = Convert.Int32的预期含义,但您应该重新设置对=>左侧可能出现的内容的预期。 -
Linq 来了之后,在你的情况下没有需要使用
Array.ConvertAll<>(但这是可能的)。你可以做var evenBools = numbers.Split(' ').Select(x => Convert.ToInt32(x) % 2 == 0).ToList();