Tengo una clase que contiene una lista. Quiero copiar esa lista a otro objeto que contenga el mismo tipo y cantidad de atributos.

        List<CinemaUnitSchema> cinemaUnitSchemas = new List<CinemaUnitSchema>();
        foreach (CinemaUnit cinemaUnits in scenario.CinemaUnits)
        {
            cinemaUnitSchemas.Add(new CinemaUnitSchema
            {
                Name = cinemaUnits.Name,
                AttendantPoints = cinemaUnits.AttendantPoints,
                ShowPoints = cinemaUnits.ShowPoints
            });                

        }
        scenarioSchema.CinemaUnits.AddRange(CinemaUnitSchemas);

Sin embargo, recibo un error en esta línea de código;

AttendantPoints = cinemaUnits.AttendantPoints

El error que estoy recibiendo es:

"No se puede convertir implícitamente el tipo 'System.Collections.Generic.List ' en 'System.Collections.Generic.List '."

Class of CinemaUnit es:

public class CinemaUnit
{
    public string Name { get; set; }    
    public List<AttendantPoint> AttendantPoints { get; set; }
    public bool ShowPoints { get; set; }
}

La clase de CinemaUnitSchema es:

public class CinemaUnitSchema
{
    public string Name { get; set; }    
    public List<AttendantPoint> AttendantPoints { get; set; }
    public bool ShowPoints { get; set; }
}

Solución prevista

Agregue en cada iteración la lista respectiva al nuevo objeto.

Gracias

c#
0
Coding hierarchy 20 sep. 2017 a las 21:26

3 respuestas

La mejor respuesta

Lo que realmente necesita es una forma de convertir AttendantPoint a AttendantPointSchema.

Solución 1 : puede usar el marco de AutoMapper para hacerlo.

Solución 2 : puede escribir un convertidor genérico como sugiere @Eser.

Solución 3 : puede crear un convertidor de cajas manualmente para cada clase utilizando métodos de extensión, operadores implícitos o explícitos o simplemente escribir una clase auxiliar con funciones estáticas.

0
Valerii 20 sep. 2017 a las 20:40

Puede escribir un método de copia que haga una copia superficial utilizando la reflexión.

void Copy(object from, object to)
{
    var dict = to.GetType().GetProperties().ToDictionary(p => p.Name, p => p);
    foreach(var p in from.GetType().GetProperties())
    {
        dict[p.Name].SetValue(to, p.GetValue(from,null), null);
    }
}
2
Eser 20 sep. 2017 a las 19:10

No estoy seguro si este es el problema, pero es probable que sea una buena apuesta. Está utilizando una instrucción foreach con el caso de camello cinemaUnits pero cuando intenta copiar los campos está utilizando el caso de título CinemaUnits en lugar de la variable con el caso de camello.

0
R. Roe 20 sep. 2017 a las 20:41