c# - C# 中的 JavaScript Array.from 等效于什么(没有 while/for)?

标签 c#

经过几年的 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]

在没有 whilefor 循环的情况下,如何在 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/

相关文章:

c# - 为什么序列化DataContract时不能使用lambda?

c# - 使用 "ExcelDataReader"获取背景颜色

c# - 使用 C# 程序启动 Dll

c# - 使用 HealthCheckUI 失败,出现异常 "No service for type ' HealthChecks.UI.Core.Data.HealthChecksDb' 已注册。”

c# - 合并 2 个 LINQ 列表时出错

c# - 运行asp.net core api项目时如何在vscode中设置不打开新的Web浏览器选项卡

c# - 由于以下错误 : 80070005,检索 CLSID 为 {00020906-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败

c# - 来自 Flex 客户端的 RSA 加密和来自 Web 服务的相应解密

c# - 具有列表对象的类的 GetHashCode

c# - MassTransit 3 与 Azure 服务总线创建队列