Есть ли простой способ создания списка идентичных объектов без использования цикла? - PullRequest
0 голосов
/ 05 февраля 2019

У меня сейчас есть что-то вроде этого:

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 голосов
/ 05 февраля 2019

У вас уже есть однострочная строка для создания массива, как насчет преобразования этого в нужный вам список?

new Person[numberOfPersons].ToList();
0 голосов
/ 05 февраля 2019

Или вы можете использовать System.Array.ConvertAll, он по-прежнему использует цикл for, но вы его не видите:) ...

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

nb, этот подход выделитмассив в два раза, поскольку он будет выделять результирующий массив и копировать элементы из ввода, используя цикл for ...

0 голосов
/ 05 февраля 2019

Как насчет

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())
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...