AJUDA COM LIST<T>

 Tópico anterior Próximo tópico Novo tópico

AJUDA COM LIST<T>

C#

 Compartilhe  Compartilhe  Compartilhe
#491787 - 10/12/2019 23:06:54

JORGESALES
CEARA
Cadast. em:Maio/2015


Pessoal, pesquisei bastante antes de postar e nem sei se o que preciso pode ser feito,
vamos lá, estou buscando uma lista de determinado objeto e em caso de erro é retornado
uma "lista" com apenas um objeto com a id = 0 e o nome = ao erro ocorrido:
        public List<Morador> LocalizarMorador()
        {
                int IdUsuario = Convert.ToInt16(httpContext.HttpContext.Session.GetString("IdUsuarioLogado"));
                if (IdUsuario < 1)
                {
                    List<Morador> listaErro = new List<Morador>();
                    Morador morador = new Morador
                    {
                        Id = 0,
                        Nome = "Sessão expirada!"
                    };
                    listaErro.Add(morador);
                    return listaErro;
                };
                List<Morador> lista = new Morador().ListaModador(IdUsuario);
                return lista;
        }

Até aí tudo bem, o que eu preciso é de uma função que ao passar o objeto seja retornado
a lista desse objeto com a Id = 0 e o Nome = ao erro que for passado por parâmetro, esbocei
algo mais ou menos assim com o que encontrei na net:
        public T ListaErro<T>(string erro)
        {
            List<T> listErro = new List<T>();
            T retorno = new T();
            {
                T.Id = 0,
                T.Nome = erro
            };
            ListaErro.Add(retorno);
            return ListaErro;
        }

Obviamente que aparece um monte de erros mas postei para que vocês tenham uma
ideia do que estou tentando fazer.
Como sempre agradeço a todos que possam ajudar.

Cursos de Excel e VB6:
cursoexcelvba.com.br




#491788 - 11/12/2019 01:19:01

MRSILVA
MARINGA
Cadast. em:Julho/2015


Olá Jorge.

Não sei se vou conseguir te ajudar mas vou passar a forma que faço para  verificar a ocorrência de erros.

Tenho uma classe que se chama validation  composta pelas seguintes propriedades: (Os nomes da propriedade aqui são simples para melhor entendimento e existe outras propriedades)

TemErro  (boolean)
DescricaoErro (string)
List<Validation> (list)

Os meus modelos de dados que exige validação tem uma propriedade Validation,  dessa forma quando ocorre algum erro ou uma validação eu estancio a propriedade Validation do meu modelo a insiro os erros.

Umas das formas que verifico se tem erro ou não :

If(Modelo.Validation != null)
{
    
    Aqui eu posso percorrer a lista de erros entre outros processos.


}

A forma acima é só uma ideia, claro que tem implementar as funcionalidades a minha por exemplo está bem incrementada consigo passar o nome do campo o rótulo do campo que está com erro entre outras funções.

Se for mais o menos isso que precisa fico a disposição em ajudar.





#491789 - 11/12/2019 09:58:36

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe
O que vc quer é uma função que retorne uma Lista genérica de qualquer objeto que for passado, e não atendendo ao critério desejado retorne id = 0 e Nome = erro.
O que vc precisa é apenas fazer o mapeamento do OBJETO passado.
Com Reflection voce consegue.
Dentro da sua função...

Agui vc obtem o objeto passado.
List<T> list = new List<T>();
T obj = default(T);
obj = Activator.CreateInstance<T>();

Agora precisa mapear o objeto percorrendo suas propriedades, e ao localizar o item, setar o valor desejado.(ID = 0 , NOME = ERRO).
Para isso deverá utilizar o método SetValue da propriedade.
Lembrando que os campos desejados no retorno deverão existir no objeto passado.








Grupo DotNet.Br no FaceBook

Grupo WhatsDev



#491790 - 11/12/2019 11:16:06

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Eu fiz isso na série de vídeos de C# basicão no canal...

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


Resposta escolhida #491801 - 11/12/2019 18:07:56

OCELOT
SOROCABA
Cadast. em:Março/2012


Última edição em 11/12/2019 18:08:51 por OCELOT

Tem como fazer, mas você precisa usar uma interface com os campos que precisa usar nesta função, e então todos as classes que você for passar pra esta função precisam implementar esta interface e ter um construtor sem parâmetros, ai é só adicionar as constraints no método

public List<T> ListaErro<T>(string erro) where T : INomeId, new()
{
    var listErro = new List<T>();
    T retorno = new T()
    {
        Id = 0,
        Nome = erro
    };
    listErro.Add(retorno);
    return listErro;
}


Como teste eu criei a interface e as classes, você ainda pode herdar de outra classe e implementar outras interfaces sem problema, desde que a classe possua um construtor sem parâmetros, no exemplo aqui como eu não criei nenhum construtor e não hero de nenhuma classe que não tenha um construtor sem parâmetro o compilador gera um construtor padrão vazio sem parâmetros
public interface INomeId
{
    int Id { get; set; }
    string Nome { get; set; }
}

public class Morador : INomeId
{
    public int Id { get; set; }
    public string Nome { get; set; }
}

public class OutraClasseQualquer : INomeId
{
    public int Id { get; set; }
    public string Nome { get; set; }
}


Se não tiver como implementar a interface ou ter um construtor sem parâmetros então só usando Reflection



#491802 - 11/12/2019 18:37:09

JORGESALES
CEARA
Cadast. em:Maio/2015


Pessoal, obrigado a todos que colaboraram, vou testar todas as opções e ver
qual delas resolve o problema.

Cursos de Excel e VB6:
cursoexcelvba.com.br




#491809 - 11/12/2019 22:06:41

JORGESALES
CEARA
Cadast. em:Maio/2015


OCELOT,
Muito obrigado, não só resolvi o problema como aprendi um pouco mais
sobre o conceito de interfaces.

Cursos de Excel e VB6:
cursoexcelvba.com.br




 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por JORGESALES em 11/12/2019 22:06:52