经过几年的 Node.js 编程,我已经习惯了 JS,我想知道我们如何避免 C# 中的 while 循环,通过使用更多的“map-like”方法(如 C# 枚举中的 AddRange)。
例如,如果我想要一个包含 10 个元素的 JavaScript 数组,每个元素都有一个每次递增的属性,我会这样做:
const cells = Array.from({ length:10 }, (_, i) => { 'number': i });
// gives cells = [{number: 0}, {number: 1}, ... until 9]
在没有 while
或 for
循环的情况下,如何在 C# 中做到这一点?
int itemWantedCount = 10;
int i = 0;
while(cells.Count < itemWantedCount)
{
cells.Add(new MyObject(i++));
}
如果可能的话,我想找到一种方法来代替使用 cells.AddRange,而不使用 for/while。
最佳答案
您可以使用 LINQ 在 C# 中进行函数式列表处理。示例:
// 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);
解释:
Enumerable.Range(start, count)
枚举我们的数字(懒惰 - 直到稍后调用ToArray()
才会发生任何事情)。Select
是“ map ”——您已经很熟悉了。在您的示例中,您会将i => i
替换为i => new MyObject(i)
。ToArray()
:具体化延迟创建的枚举。由于数组在 C# 中是固定大小的,因此更惯用的替代方法是ToList()
。
关于c# - C# 中的 JavaScript Array.from 等效于什么(没有 while/for)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70959937/