Como usar Reflection para manipular as propriedades de um objeto em C#?
Usando Reflection, é possível manipular as propriedades de um objeto da maneira que você quiser.
Listar as Propriedades de um Objeto
O exemplo seguinte ilustra como acessar as propriedades públicas de um objeto. A chave para isso é o objeto PropertyInfo.1 using System.Reflection; 2 3 public static void ListarPropriedades(object o) { 4 5 Type t = o.GetType(); 6 7 foreach (PropertyInfo pi in t.GetProperties()) { 8 9 Console.WriteLine(string.Format("{0} {1}", 10 pi.PropertyType.FullName, pi.Name)); 11 } 12 }
Obter o Valor das Propriedades de um Objeto
O exemplo seguinte ilustra como obter os valores das propriedades públicas de um objeto.1 using System.Reflection; 2 3 public static void ListarValores(object o) { 4 5 Type t = o.GetType(); 6 7 foreach (PropertyInfo pi in t.GetProperties()) { 8 9 Console.WriteLine(string.Format("{0} {1} = {2}", 10 pi.PropertyType.FullName, pi.Name, 11 pi.GetValue(o, null))); 12 } 13 }
Alterar o Valor das Propriedades de um Objeto
O exemplo seguinte é ligeiramente diferente dos anteriores. Ele ilustra como alterar o valor de uma determinada propriedade pública de um objeto.1 using System.Reflection; 2 3 public static void AlterarValor(object o, 4 string propriedade, object valor) { 5 6 Type t = o.GetType(); 7 8 foreach (PropertyInfo pi in t.GetProperties()) { 9 10 if (pi.Name.Equals(propriedade)) { 11 12 pi.SetValue(o, valor, null); 13 break; 14 } 15 } 16 }
Note que AlterarValor() pode receber qualquer objeto como argumento, independente do objeto possuir ou não a propriedade desejada; se o objeto possuir a propriedade, o valor dela será ajustado para o valor fornecido.
Outro ponto: como o valor é passado como um object, dependendo como o argumento é passado, existe uma penalidade envolvida que é o boxing do argumento.
Nenhum comentário:
Postar um comentário