获取强类型列表项数据类型?

时间:2011-06-13 12:27:11

标签: list generics .net-4.0

假设我有一个List<object>作为参数传递给一个类,这个列表应该包含一堆我的应用程序所有相同类型的模型。那么我可以以某种方式检索传入的列表类型吗? (不对列表中的项目调用GetType()。)

例如,我传入存储为List<User>的{​​{1}},我现在可以从列表中检索用户类型,而不执行以下操作:

List<object>

2 个答案:

答案 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