ラムダ式を使ってオブジェクトのリストをある型から別の型に変換する
ある型のオブジェクトのリストを読み込んで、異なる型のオブジェクトのリストを生成するforeachループがあります。ラムダ式でも同じ結果が得られると聞きました。
var origList = List<OrigType>(); // assume populated
var targetList = List<TargetType>();
foreach(OrigType a in origList) {
targetList.Add(new TargetType() {SomeValue = a.SomeValue});
}
ラムダやLINQは初めてなので、何かアドバイスがあればお願いします。 ありがとうございます。 s
200
3
以下をお試しください。
これは、ラムダとLINQを組み合わせてソリューションを実現しています。 Select関数はプロジェクション形式のメソッドで、渡されたデリゲート(この場合はラムダ)を元のコレクションのすべての値に適用します。 その結果は、新しい
IEnumerable
で返されます。 .ToListの呼び出しは、このIEnumerable
をList
に変換する拡張メソッドです。もし、
List
からList
に変換したいことが分かっている場合、List.ConvertAll
は、Select
/ToList
よりもわずかに効率が良くなります。なぜなら、開始する正確なサイズを知っているからです。より一般的なケースとして、ソースを
IEnumerable
としてしか知らない場合には、Select
/ToList
を使用するのが良いでしょう。LINQがある世界では、最初からSelect
/ToList
を使ったほうが慣用的であるという意見もありますが、少なくともConvertAll
オプションを知っておく価値はあるでしょう。このようにすればいいと思います。