You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中像Python一样通过表达式简洁初始化列表?

问题

我有一个返回对象的函数,C#版本如下:

public object toto() {}

Python版本如下:

def toto():
    return "something"

我想以非常简洁的方式初始化一个包含n个元素的列表,在Python中可通过列表推导式实现:

l = [toto() for i in range(1, n+1)]

请问在C#中有没有类似的简洁方式,无需使用循环?


回答

C#里可以借助LINQ实现和Python列表推导式类似的简洁写法,无需手动编写循环:

方法一:结合Enumerable.Range和Select

先确保代码文件顶部引入LINQ的命名空间:

using System.Linq;

然后用一行代码生成目标列表:

var list = Enumerable.Range(1, n).Select(_ => toto()).ToList();
  • Enumerable.Range(1, n)生成从1到n的整数序列,和Python的range(1, n+1)效果一致;
  • Select(_ => toto())对序列中的每个元素调用toto()(下划线_表示不需要使用循环变量);
  • ToList()将最终的序列转换为List<object>类型。

方法二:结合Enumerable.Repeat和Select

如果不需要生成特定范围的整数序列,只是需要生成n个元素,也可以用这种写法:

var list = Enumerable.Repeat(0, n).Select(_ => toto()).ToList();

注意:不能直接用Enumerable.Repeat(toto(), n),因为这只会调用一次toto(),然后重复返回同一个对象的引用,而我们需要的是每次调用toto()生成新对象,所以必须搭配Select来实现。


内容的提问来源于stack exchange,提问作者Milan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:45:43