经过几年的 Node.js 编程,我已经习惯了 JS,我想知道如何避免C# 中的while循环,通过使用更“类似地图”的方法(如 C# 中的 AddRange)来添加数组中的项目可枚举)。
例如,如果我想要一个 JavaScript 中包含 10 个元素的数组,每个元素都有一个每次递增的属性,我会这样做:
const cells = Array.from({ length:10 }, (_, i) => { 'number': i });
// gives cells = [{number: 0}, {number: 1}, ... until 9]
Run Code Online (Sandbox Code Playgroud)
如何在没有whileorfor循环的 C# 中做到这一点?
int itemWantedCount = 10;
int i = 0;
while(cells.Count < itemWantedCount)
{
cells.Add(new MyObject(i++));
}
Run Code Online (Sandbox Code Playgroud)
我想找到一种使用 cells.AddRange 的方法,而不使用 for/while ,如果可能的话。
您可以在 C# 中使用LINQ进行函数式列表处理。例子:
// We don't need Select in this toy example, but this is where
// you would put your "map" operation.
var cells = Enumerable.Range(0, 10).Select(i => i).ToArray();
// prints 0123456789
foreach (var c in cells)
Console.Write(c);
Run Code Online (Sandbox Code Playgroud)
解释:
Enumerable.Range(start, count)枚举我们的号码(懒惰地 - 直到稍后调用才发生任何事情ToArray())。Select是“地图”——你已经熟悉它了。在您的示例中,您将替换i => i 为i => new MyObject(i).ToArray():具体化延迟创建的枚举。由于数组在 C# 中是固定大小的,因此更惯用的替代方案是ToList().| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |