Да, 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
соответственно.
Также обратите внимание, что одно дело перечислить членов дляфайл, но вы не должны использовать эту информацию для управления логикой на основе property sets.
Предполагая, что вы контролируете реализации типов, вы должны наследовать общий базовый класс или реализовывать общий интерфейс и выполнять вызовы для них (вы можете использовать as
или is
оператор, помогающий определить, с каким базовым классом / интерфейсом вы работаете во время выполнения).
Однако, если вы не управляете этими определениями типов и должныуправляйте логикой, основанной на сопоставлении с образцом, тогда все в порядке.