我目前有这样的东西:
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];
我的问题是:
我猜想数组可能在内部执行与使用循环创建此数组完全相同的操作,但是符号不同。但这不是现在要考虑的问题,对于这个问题,我只是对一个更简单的表示法感兴趣。
答案 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
循环从输入中复制元素...