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