是否有创建相同的对象列表,而无需使用一个循环的一个简单的方法?

问题描述 投票:1回答:3

我现在有这样的事情:

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];

我的问题是:

  • 是否有创建的对象的列表不使用循环的简单/直接的方式?

我想,一个阵列内部可能不完全一样的东西使用循环创建数组但具有不同的符号。但是,这不是现在关注的问题,对于这个问题,我在一个简单的符号只是感兴趣。

c# loops
3个回答
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
投票

你已经有一个班轮构建一个数组,如何有关转换成你想要的名单?

new Person[numberOfPersons].ToList();

0
投票

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

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

注:这种方法将分配阵列的两倍,因为它会分配所得的阵列和复制使用for循环从输入元件...

© www.soinside.com 2019 - 2024. All rights reserved.