c# - 如何使用 linq 初始化重复元素数组?

标签 c# linq

目前,我正在使用类似这样的东西来构建一个包含 10 个对象的列表:

myList = (from _ in Enumerable.Range(0, 10) select new MyObject {...}).toList()

这是基于我的 python 背景,我会写:

myList = [MyObject(...) for _ in range(10)]

请注意,我希望我的列表包含对象的 10 个实例,而不是同一个实例 10 次。

这仍然是用 C# 做事的明智方式吗?通过简单的 for 循环这样做是否有成本?

最佳答案

在这种情况下,Fluent API 看起来更具可读性,但不太容易看出代码的意图:

var list = Enumerable.Range(0, 10).Select(_ => new MyObject()).ToList();

简单的 if 循环快速且易于理解,但它也隐藏了意图 - 创建 10 项的列表

List<MyObject> list = new List<MyObject>();
for (int i = 0; i < 10; i++)
     list.Add(new MyObject());

对于可读性来说最好的东西是构建器,它将描述你的意图

public class Builder<T>
    where T : new()
{
    public static IList<T> CreateListOfSize(int size)
    {
        List<T> list = new List<T>();
        for (int i = 0; i < size; i++)
            list.Add(new T());
        return list;
    }
}

用法:

var list = Builder<MyObject>.CreateListOfSize(10);

这个解决方案和简单的循环一样快速,而且意图非常明确。同样在这种情况下,我们要编写的代码量最少。

关于c# - 如何使用 linq 初始化重复元素数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13553022/

相关文章:

c# - 从 IQueryable<T> 转换为 T

c# - 方法无法转换为 LINQ 中的存储表达式

c# - 编译器不会对 Linq 中使用的过时属性引发错误

c# - public static vs static public - 有区别吗?

c# - 获取委托(delegate)中所有返回的字符串表单方法

c# - 同时查找和映射

c# - 如何使用 LINQ 扩展方法迭代集合并更改值?

c# - .NET Core 2.0 访问用户 secret

c# - C# 中的匿名类型是什么?

c# - 即使没有请求参数,Web API 参数绑定(bind)也返回实例