Após a aula me ocorreu de inverter um pouco a lógica pegando como base as propriedades e imprimindo elas na tela, pricipalmente pensando em 1 para N, como para exibir os detalhes de um cadastro, e usar de forma dinâmica para todas as classes que eu deseje. Então criei o código abaixo. Porém esbarrei na seguinte mensagem: "Os argumentos de tipo do método não podem ser inferidos com base no uso. Tente especificar explicitamente os argumentos de tipo".
Como faço para imprimir na tela dinamicamente todas as propriedades da classe, incluindo as listas como Telefones e Categorias?
Outra Pergunta: Tem uma forma mais elegante de identificar se a propriedade é uma classe, sem ser comparando com "System"?
Se tratado só a classe pessoa o resultado do Código é esse: TestReflection.Pessoa Nome: João da Silva Telefones: TestReflection.Telefones Categorias: TestReflection.Categorias
O Que eu desejo é: TestReflection.Pessoa Nome: João da Silva TestReflection.Telefones Tipo: 1 Numero: (11)9985-8554 Categorias: TestReflection.Categorias Tipo: 5 Descricao: Empresario
Veja o código:
class Program
{
static void Main(string[] args)
{
List<Pessoa> listPeson = new List<Pessoa>();
var person1 = new Pessoa();
person1.Nome = "João da Silva";
person1.Telefones = new Telefones { new Telefone { Tipo = 1, Numero = "(11)9985-8554" } };
person1.Categorias = new Categorias { new Categoria { Tipo = 5, Descricao = "Empresario" } };
listPeson.Add(person1);
InformacaoDinamica(listPeson);
Console.ReadLine();
}
public static void InformacaoDinamica<T>(List<T> listReg)
{
for (int i = 0; i < listReg.Count; i++)
{
Console.WriteLine(listReg[i].GetType());
foreach (var propriedade in listReg[i].GetType().GetProperties())
{
if (propriedade.PropertyType.FullName.StartsWith("System"))
{
Console.WriteLine($"{propriedade.Name}: {propriedade.GetValue(listReg[i], null)}");
}
else
{
InformacaoDinamica(propriedade.GetValue(listReg[i], null)); //Não Compila
//InformacaoDinamica((List<object>)propriedade.GetValue(listReg[i], null)); //Compila mas da mensagem que não pode converter lista generica em lista telefones
}
}
}
}
}
class Pessoa
{
public string Nome { get; set; }
public Telefones Telefones { get; set; }
public Categorias Categorias { get; set; }
}
class Telefones : List<Telefone> { }
class Telefone
{
public int Tipo { get; set; }
public string Numero { get; set; }
}
class Categorias : List<Categoria> { }
class Categoria
{
public int Tipo { get; set; }
public string Descricao { get; set; }
}
Desde já Obrigado