Bir türdeki nesnelerin listesini okuyan ve farklı bir türdeki nesnelerin listesini üreten bir foreach döngüm var. Bana bir lambda ifadesinin aynı sonucu elde edebileceği söylendi.
var origList = List<OrigType>(); // assume populated
var targetList = List<TargetType>();
foreach(OrigType a in origList) {
targetList.Add(new TargetType() {SomeValue = a.SomeValue});
}
Herhangi bir yardım takdir edilecektir - lambda ve linq konusunda yeniyim Teşekkürler, s
Aşağıdakileri deneyin
var targetList = origList
.Select(x => new TargetType() { SomeValue = x.SomeValue })
.ToList();
Bu, çözüme ulaşmak için Lambda ve LINQ'nun bir kombinasyonunu kullanıyor. Select fonksiyonu, aktarılan delegeyi (veya bu durumda lambda'yı) orijinal koleksiyondaki her değere uygulayacak olan projeksiyon tarzı bir metottur. Sonuç yeni bir IEnumerable<TargetType>
içinde döndürülecektir. .ToList çağrısı, bu IEnumerable<TargetType>
ı bir List<TargetType>
a dönüştürecek bir uzantı yöntemidir.
Eğer List<T1>
den List<T2>
ye dönüştürmek istediğinizi biliyorsanız o zaman List<T>.ConvertAll
Select
/ToList
ten biraz daha verimli olacaktır çünkü başlangıç için tam boyutu bilir:
target = orig.ConvertAll(x => new TargetType { SomeValue = x.SomeValue });
Kaynağı yalnızca bir IEnumerable<T>
olarak bildiğiniz daha genel durumda, Select
/ToList
kullanmak gitmenin yoludur. Ayrıca, LINQ'nun olduğu bir dünyada, bunun başlamak için daha deyimsel olduğunu da iddia edebilirsiniz... ancak en azından `ConvertAll' seçeneğinin farkında olmaya değer.
Bunun gibi bir şeyin işe yaraması gerektiğine inanıyorum:
origList.Select(a => new TargetType() { SomeValue = a.SomeValue});