C# for or foreach to create array from List
在列表中循环、对每个元素执行某些操作以及从这些项创建数组的最优雅的方法是什么?
这两种解决方案都有其作用,但是,使用一种解决方案优于另一种解决方案是否有优缺点,或者是否有一种更优雅的方法可以在C中实现这一点?
例1:
1 2 3 4 5 6 7 8 9 10 11 12 13
| public void SomeFunc (List <Person > lst )
{
PersonPrivate [] arr = new PersonPrivate [lst .Count];
int idx = 0;
lst .ForEach(x =>
{
PersonPrivate p = new PersonPrivate (convert (p .name), convert (p .lastname));
arr [idx ] = p ;
idx ++;
}
SavePerson (arr );
} |
例2:
1 2 3 4 5 6 7 8 9 10 11
| public void SomeFunc (List <Person > lst )
{
PersonPrivate [] arr = new PersonPrivate [lst .Count];
for (int i = 0; i < lst .Count; i ++)
{
PersonPrivate p = new PersonPrivate (convert (p .name), convert (p .lastname));
arr [i ] = p ;
}
SavePerson (arr );
} |
号
编辑:我不相信这个问题和标记为重复的问题完全一样。尽管它也提供了有用的信息,但是for和foreach之间的比较并不是特定于从列表创建数组。
- 为什么不直接使用.toarray()方法呢?
- 通常情况下,这将通过Linq的.Select来实现——这是一个可行的解决方案吗?
- 江户十一〔一〕号
- linq可能会使这更容易:var privp=lst.select(x=>new(personprivate(convert(x.name),convert(x.lastname)).toarray();
- 在我看来,ForEach几乎总是错误的选择(根据你想做的事情,使用ForEach或Select)。
- foreach循环与foreach方法的可能重复-差异?
- @AlexanderDerck你的评论至少回答了"有没有更优雅的方法可以用C语言实现这一点?"所以我认为把它写下来作为答案是合适的。我会投反对票。
是的Select使用。 </P >
1 2 3 4
| var arr = list
.Select(p => new PersonPrivate (convert (p .name), convert (p .lastname)))
.ToArray();
SavePerson (arr ); |