Да, Reflection был бы подходящим вариантом. Во-первых, вы получите тот, Typeкоторый представляет тип (во время выполнения) экземпляра в списке. Вы можете сделать это, вызвав GetTypeметодObject . Поскольку он находится в Objectклассе, он может вызываться каждым объектом в .NET, поскольку все типы являются производными Object( ну, технически, не все , но это здесь не важно).
Получив Typeэкземпляр, вы можете вызвать GetPropertiesметод, чтобы получить PropertyInfoэкземпляры, которые представляют информацию времени выполнения о свойствах объекта Type.
Обратите внимание, что вы можете использовать перегрузки, GetPropertiesчтобы помочь классифицировать, какие свойства вы получаете.
Оттуда вы просто записали бы информацию в файл.
Ваш код выше, переведенный, будет:
// 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);
}
Обратите внимание, что если вы хотите получить информацию о методе или поле, вам необходимо вызвать одну из перегрузок методов GetMethodsили GetFieldsсоответственно.
Также обратите внимание, что одно дело перечислить элементы в файле, но вы не должны использовать эту информацию для управления логикой на основе наборов свойств.
Предполагая, что у вас есть контроль над реализациями типов, вы должны наследовать общий базовый класс или реализовывать общий интерфейс и выполнять их вызовы (вы можете использовать оператор asor, isчтобы определить, с каким базовым классом / интерфейсом вы работаете). во время выполнения).
Однако, если вы не управляете этими определениями типов и вынуждены управлять логикой, основанной на сопоставлении с образцом, то это нормально.