Sí, la reflexión sería el camino a seguir. Primero, obtendría el Type
que representa el tipo (en tiempo de ejecución) de la instancia en la lista. Puede hacer esto llamando al GetType
métodoObject
. Debido a que está en la Object
clase, todos los objetos en .NET pueden llamarlo, ya que todos los tipos se derivan de Object
( bueno, técnicamente, no todo , pero eso no es importante aquí).
Una vez que tenga la Type
instancia, puede llamar al GetProperties
método para obtener las PropertyInfo
instancias que representan la información de tiempo de ejecución sobre las propiedades en el Type
.
Tenga en cuenta que puede usar las sobrecargas de GetProperties
para ayudar a clasificar qué propiedades recupera.
A partir de ahí, simplemente escribiría la información en un archivo.
Su código anterior, traducido, sería:
// 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);
}
Tenga en cuenta que si desea información de método o información de campo, deberá llamar a una de las sobrecargas de los métodos GetMethods
o GetFields
respectivamente.
También tenga en cuenta que una cosa es enumerar los miembros de un archivo, pero no debe usar esta información para conducir la lógica basada en conjuntos de propiedades.
Suponiendo que tiene control sobre las implementaciones de los tipos, debe derivar de una clase base común o implementar una interfaz común y hacer las llamadas en esos (puede usar el operador as
u is
para ayudar a determinar con qué clase / interfaz base está trabajando en tiempo de ejecución).
Sin embargo, si no controla estas definiciones de tipo y tiene que manejar la lógica basada en la coincidencia de patrones, entonces está bien.