Sim, a reflexão seria o caminho a percorrer. Primeiro, você obteria o Typeque representa o tipo (em tempo de execução) da instância na lista. Você pode fazer isso chamando o GetTypemétodo emObject . Por estar na Objectclasse, é 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 Typeinstância, você pode chamar o GetPropertiesmétodo para obter as PropertyInfoinstâncias que representam as informações em tempo de execução sobre as propriedades no Type.
Observe que você pode usar as sobrecargas de GetPropertiespara 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 GetMethodsou 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 asor ispara 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.