4
respostas

Criar uma lista dentro do construtor (Revisitado)

Alterei o tópico, porque esqueci de colocar na classe usuário o List e List.

Tenho as seguintes classes abaixo e vou criar um objeto:

  • Não coloquei private set para facilitar.

var usuario = new Usuario( nome: "Marcos", idade: 18, endereco: new List() ...? => preciso passsar valores aqui telefone: new List() ... ? => preciso passar valores aqui );

Como posso adicionar valores no construtor em um argumento que é uma lista?

Obrigado pela atenção.

public class Usuario {
        public string Nome {get; set;}
        public int Idade {get;set}
        public List<Endereco> Endereco {get; set;}
        public List<Telefone> Telefone { get; set; }

        public Usuario(string nome, int idade, Endereco endereco, Telefone telefone){
            Nome = nome;
            Idade = idade;
            Endereco = endereco;
            Telefone = telefone;
        }
}

public class Endereco {
        public string Logradouro {get; set;}
        public string Numero {get; set;}
        public string Complemento {get; set;}
        public string Bairro {get; set;}
        public string Cidade {get; set;}
        public string Estado {get; set;}
        public string Cep {get; set;}
        public Tipo Tipo {get; set;}

}


public class Telefone {
        public int DDD {get; set;}
        public string Telefone {get; set:}
        public Tipo Tipo {get; set;}

}

enum Tipo {
    Comercial = 1,
    Residencial = 2
}
4 respostas

Boa Tarde Freddy! Basta criar o endereco como List<> e no momento de construir o objeto ele irá esperar uma lista no parametro. Ex:

public class Usuario {
        public string Nome {get; set;}
        public int Idade {get;set}
        public List<Endereco> Enderecos {get; set;}
        public Telefone Telefone { get; set; }

        public Usuario(string nome, int idade, List<Endereco> enderecos, Telefone telefone){
            Nome = nome;
            Idade = idade;
            Enderecos = enderecos;
            Telefone = telefone;
        }
    }

Errei nos atributos da classe usuário. Esqueci de colocar o List<>. Refiz a pergunta com os exemplos.

Imagine o seguinte quadro:

Tenho um DTO com as mesmas características dessa minha classe, mas eu preciso criar um novo objeto. Então, eu faço:

var listaUsuarios = new CriarUsuarioDTO(
        usuario = umDTOorigem.Nome,
        idade = umDTOorigem.Idade,
        endereco = new List<EnderecoDTO>(umDTOorigem.Endereco),
        telefone = new List<TelefoneDTO>(umDTOorigem.Telefone)
);

Não sei se é o certo. Se não for, poderia me ajudar?

Obrigado

opa! Então, você mudou a propriedade Endereço e Telefone para List<>. Também é necessário mudar o Construtor da classe para recebe uma lista como exemplifiquei acima.

public class Usuario {
        public string Nome {get; set;}
        public int Idade {get;set}
        public List<Endereco> Endereco {get; set;}
        public List<Telefone> Telefone { get; set; }

        public Usuario(string nome, int idade, List<Endereco> endereco, List<Telefone> telefone){
            Nome = nome;
            Idade = idade;
            Endereco = endereco;
            Telefone = telefone;
        }
}

public class Endereco {
        public string Logradouro {get; set;}
        public string Numero {get; set;}
        public string Complemento {get; set;}
        public string Bairro {get; set;}
        public string Cidade {get; set;}
        public string Estado {get; set;}
        public string Cep {get; set;}
        public Tipo Tipo {get; set;}

}


public class Telefone {
        public int DDD {get; set;}
        public string Telefone {get; set:}
        public Tipo Tipo {get; set;}

}

enum Tipo {
    Comercial = 1,
    Residencial = 2
}

Sobre o exemplo do DTO... Se ele for identico ao usuario seria assim a atribuição de valores:

var Usuario = new Usuario(
        usuario = umDTOorigem.Nome,
        idade = umDTOorigem.Idade,
        endereco = umDTOorigem.Endereco, // Caso o valor ja seja uma lista do tipo "Endereço" não é necessário criar uma nova lista com NEW LIST
        telefone = umDTOorigem.Telefone
);

Esse seria um exemplo de para percorrer uma Lista de UsuarioDTO atribuindo a Lista de Usuario:

var listaUsuarios = new List<Usuario>();
foreach(var usuarioDTO in umDTOorigem) 
{
        listaUsuarios.Add(new Usuario()
                                        {
                                        usuario = usuarioDTO.Nome,
                                        idade = usuarioDTO.Idade,
                                        endereco = usuarioDTO.Endereco,
                                        telefone = usuarioDTO.Telefone                                        
                                        });
}