是的,反思将是必经之路。首先,您将获得,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
or GetFields
方法的重载之一。
还要注意,列出文件的成员是一回事,但是您不应该使用此信息来驱动基于属性集的逻辑。
假设您可以控制这些类型的实现,则应从一个公共基类派生或实现一个公共接口并对其进行调用(可以使用as
or is
运算符来帮助确定您正在使用的基类/接口。运行)。
但是,如果您不控制这些类型定义,而必须基于模式匹配来驱动逻辑,那很好。