clase - agregar objetos a una lista c#
convertir una lista de objetos de un tipo a otro utilizando lambda expresión (7)
Aquí hay un ejemplo simple ...
List<char> c = new List<char>() { ''A'', ''B'', ''C'' };
List<string> s = c.Select(x => x.ToString()).ToList();
Tengo un ciclo foreach leyendo una lista de objetos de un tipo y produciendo una lista de objetos de un tipo diferente. Me dijeron que una expresión lambda puede lograr el mismo resultado.
var origList = List<OrigType>(); // assume populated
var targetList = List<TargetType>();
foreach(OrigType a in origList) {
targetList.Add(new TargetType() {SomeValue = a.SomeValue});
}
Cualquier ayuda sería apreciada, soy nuevo en lambda y linq gracias, s
Creo que algo como esto debería funcionar:
origList.Select(a => new TargetType() { SomeValue = a.SomeValue});
Pruebe lo siguiente
var targetList = origList
.Select(x => new TargetType() { SomeValue = x.SomeValue })
.ToList();
Esto está usando una combinación de Lambdas y LINQ para lograr la solución. La función Seleccionar es un método de estilo de proyección que aplicará el delegado pasado (o lambda en este caso) a cada valor en la colección original. El resultado se devolverá en un nuevo IEnumerable<TargetType>
. La llamada .ToList es un método de extensión que convertirá este IEnumerable<TargetType>
en una List<TargetType>
.
Si sabe que desea convertir de List<T1>
a List<T2>
, List<T>.ConvertAll
será ligeramente más eficiente que Select
/ ToList
ya que sabe el tamaño exacto para comenzar:
target = orig.ConvertAll(x => new TargetType { SomeValue = x.SomeValue });
En el caso más general, cuando solo conoce la fuente como IEnumerable<T>
, usar Select
/ ToList
es el camino a seguir. También podría argumentar que en un mundo con LINQ, es más idiomático comenzar ... pero vale la pena al menos conocer la opción ConvertAll
.
List<target> targetList = new List<target>(originalList.Cast<target>());
var list1 = new List<Type1>();
var list2 = new List<Type2>();
list1.ForEach(item => list2.Add(new Type2() { Prop1 = value1 }));
var target = origList.ConvertAll(x => (TargetType)x);