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
method on Object
. Debido a que está en la clase Object
, se puede llamar por cada objeto en .NET, ya que todos los tipos derivan de Object
(well, technically, not everything, pero eso no es importante aquí).
Una vez que tenga la instancia Type
, puede llamar a la GetProperties
method para obtener los PropertyInfo
casos que representan el tiempo de ejecución informationa acerca de las propiedades en el Type
.
Nota, puede usar las sobrecargas de GetProperties
para ayudar a clasificar que propiedades recupera.
A partir de ahí, solo debe escribir 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 sobre el método o la información de campo, que tendría que llamar a la una de las sobrecargas de los métodos GetMethods
o GetFields
respectivamente.
También tenga en cuenta que una cosa es enumerar a los miembros en un archivo, pero no debe usar para usar esta información para conducir la lógica en función de 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
o is
para ayudar a determinar qué clase base/interfaz con la que está trabajando en tiempo de ejecución).
Sin embargo, si no controla estas definiciones de tipo y tiene que conducir la lógica en función de la coincidencia de patrones, entonces está bien.
Como nota al margen: tener objetos de diferentes tipos en una lista (sin clase de base común o interfaz) no es un buen estilo de programación, al menos no en C#. –