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

Ale*_*Ras 1 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;
}
Run Code Online (Sandbox Code Playgroud)

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

var persons = new Person[numberOfPersons];
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 有没有使用循环创建对象列表的简单/直接方法?

我猜一个数组可能在内部完全相同,使用一个循环来创建这个数组,但使用不同的表示法.但现在这不是一个问题,对于这个问题,我只是对一个更简单的符号感兴趣.

Jod*_*ell 8

怎么样,

var persons  = Enumerable.Range(0, numberOfPersons).Select(i => new Person()).ToList();
Run Code Online (Sandbox Code Playgroud)

你也可以做得越钝,

var persons = Enumerable
        .Repeat<Func<Person>>(() => new Person(), numberOfPersons)
        .Select(f => f())
        .ToList();
Run Code Online (Sandbox Code Playgroud)

最后,我发现for循环更容易理解,并且执行起来更快.

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

  • 这比简单的循环效率低很多很多倍 (2认同)
  • @Sefe这很奇怪,我在现实世界中工作,它在我的系统中可测量且可证明是重要的 (2认同)