假设我有一个List<object>
作为参数传递给一个类,这个列表应该包含一堆我的应用程序所有相同类型的模型。那么我可以以某种方式检索传入的列表类型吗? (不对列表中的项目调用GetType()
。)
例如,我传入存储为List<User>
的{{1}},我现在可以从列表中检索用户类型,而不执行以下操作:
List<object>
答案 0 :(得分:3)
嗯,你可以使用:
Type elementType = aList.GetType().GetGenericArguments[0];
但是,如果您从FooList
传入派生的List<Foo>
,则会失败。你可以走类型层次结构并以适当的方式解决问题,但这会很痛苦。
如果可能的话,最好在整个代码中使用泛型,这可能会使现有方法变得通用 - 例如而不是:
public void Foo(List<object> list)
你有
public void Foo<T>(List<T> list)
甚至
public void Foo<T>(IList<T> list)
如果只是需要它来处理某个列表的执行时类型总是List<T>
的特定情况,那么使用GetGenericArguments
将起作用..但它并不是非常好。
答案 1 :(得分:0)
据我所知,泛型的目的是不必手动进行类型检查。编译器确保列表中的项目是他们声称的类型,因此出来的项目将是该类型。
如果您有List<object>
,那么您根本就没有使用泛型的目的。 List<object>
是一个列表,可以存储任何类型的对象,无论您实际放入哪种类型。因此,您有责任检测您检索的对象的实际类型。
简而言之:您必须使用GetType
。