有没有一种简单的方法可以创建相同对象的列表而不使用循环?

时间:2019-02-05 09:01:29

标签: c# loops

我目前有这样的东西:

public class Person
{
    public string Firstname { get; set; }

    public string Lastname { get; set; }
}

public List<Person> CreatePersons(int numberOfPersons)
{
    var persons = new List<Person>();

    for (int i = 0; i < numberOfPersons; i++)
    {
        persons.Add(new Person())
    }

    return persons;
}

我知道,如果我要使用array,那么我可以这样做:

var persons = new Person[numberOfPersons];

我的问题是:

  • 是否有一种简单/直接的方法可以在不使用循环的情况下创建对象列表?

我猜想数组可能在内部执行与使用循环创建此数组完全相同的操作,但是符号不同。但这不是现在要考虑的问题,对于这个问题,我只是对一个更简单的表示法感兴趣。

3 个答案:

答案 0 :(得分:8)

怎么样

var persons  = Enumerable.Range(0, numberOfPersons).Select(i => new Person()).ToList();

您也可以做得更钝,

var persons = Enumerable
        .Repeat<Func<Person>>(() => new Person(), numberOfPersons)
        .Select(f => f())
        .ToList();

最后,我发现for循环更容易理解,并且执行速度更快。

var persons = new List<Person>(numberOfPersons);
for (int i = 0; i < numberOfPersons; i++)
{
    persons.Add(new Person())
}

答案 1 :(得分:1)

您已经有了一个单线构造数组,如何将其转换为所需的列表?

new Person[numberOfPersons].ToList();

答案 2 :(得分:0)

或者您可以使用System.Array.ConvertAll,它仍然使用for循环,但您看不到它:)...

var persons = Array.ConvertAll(new Person[30], _ => new Person());

n.b。这种方法将分配数组两次,因为它将分配结果数组并使用for循环从输入中复制元素...