Sim, a reflexão seria o caminho a percorrer. Primeiro, você obteria o Type
que representa o tipo (em tempo de execução) da instância na lista. Você pode fazer isso chamando o GetType
método emObject
. Por estar na Object
classe, é possível chamar todos os objetos no .NET, pois todos os tipos derivam Object
( bem, tecnicamente, nem tudo , mas isso não é importante aqui).
Depois de ter a Type
instância, você pode chamar o GetProperties
método para obter as PropertyInfo
instâncias que representam as informações em tempo de execução sobre as propriedades no Type
.
Observe que você pode usar as sobrecargas de GetProperties
para ajudar a classificar quais propriedades você recupera.
A partir daí, basta escrever as informações em um arquivo.
Seu código acima, traduzido, seria:
// The instance, it can be of any type.
object o = <some object>;
// Get the type.
Type type = o.GetType();
// Get all public instance properties.
// Use the override if you want to classify
// which properties to return.
foreach (PropertyInfo info in type.GetProperties())
{
// Do something with the property info.
DoSomething(info);
}
Observe que, se você quiser informações sobre o método ou informações sobre o campo, precisará chamar uma das sobrecargas dos métodos GetMethods
ou GetFields
, respectivamente.
Observe também que uma coisa é listar os membros em um arquivo, mas você não deve usar essas informações para conduzir a lógica com base nos conjuntos de propriedades.
Supondo que você tenha controle sobre as implementações dos tipos, você deve derivar de uma classe base comum ou implementar uma interface comum e fazer as chamadas (você pode usar o operador as
or is
para ajudar a determinar com qual classe / interface base você está trabalhando. tempo de execução).
No entanto, se você não controla essas definições de tipo e precisa conduzir a lógica com base na correspondência de padrões, tudo bem.