【发布时间】:2015-05-27 12:15:25
【问题描述】:
考虑一个具有以下签名的方法:
void foo(List<T> myList) ...
假设,通过使用反射,你需要构造这样一个函数,并获取T类型参数的PropertyInfo细节。调用 typeof(T).GetProperties(...) 应该可以解决问题,因此我们可以在方法中添加以下行,以获取这些详细信息。
void foo(List<T> myList)
{
PropertyInfo[] props =
typeof(T).GetProperties(BindingFlags.Public
| BindingFlags.Instance
| BindingFlags.FlattenHierarchy);
...
}
这提供了我们需要的信息...除了T 是接口参数时,我发现props 仅包含接口属性,而不包含与列表中的类关联的属性,继承自接口。
需要明确的是,我的接口和我的类定义是公开的,我的类中的属性也是如此。
如何获取与继承接口的实际类型相关的属性,而不是严格的接口属性?
【问题讨论】:
-
如果T是一个接口,那么myList可以包含不同实际类型的对象。
-
是的,这不可能吗?我的实际情况是我有一个方法可以返回我需要使用的
List<IMyInterface>。在获得列表并塑造一些类似的属性后,我需要将列表传递给一个更通用的函数(一个接受List<T>的函数,我需要遍历所有属性。属性可以展平,但我需要访问所有这些,至少在接口和类定义中定义。 -
“我发现 props 只包含接口属性”——当然;泛型类型参数
T在编译时进行评估,因此没有任何东西可以依赖于该列表的 content。
标签: c# .net generics reflection