2016-01-22 34 views
2

我有一个类型,我只了解在运行时:如何将运行时已知的类型转换为给定类型的列表?

Type givenType = FindOutTypeOf(someObject); 

和我有以下方法:

public void SomeMethod(Type type);

,我需要与List<givenType>类型来调用它。

如何转换给定类型(即我知道了在运行时)给定类型的列表?

+0

你的意思是如何创建给定类型的列表?如果是这样:http://stackoverflow.com/questions/4661211/c-sharp-instantiate-generic-list-from-reflected-type –

+0

不,我需要通过类型(C#类),这是一个给定的名单键入,我检索。我会改的VAR的问题 –

+1

嗯,还有你的回答仍然是类型[这里](http://stackoverflow.com/a/4661237/3010968)你并不需要调用'Activator.CreateInstance' ,'structuredListType'就是你要找的。 –

回答

4

试试这个

var listType = typeof(List<>); 
var constructedListType = listType.MakeGenericType(givenType); 
-1

编辑:误解了这个问题。

下面的代码将让你在运行时获得对象的类型,并创建该类型,然后可以传递给你的方法列表:

Type givenType = typeof(someObject); 
Type listType = typeof(List<>).MakeGenericType(givenType); 
SomeMethod(listType); 
+0

更新以更好地解决您的问题。 – Chase

-1

如果我理解正确,那么您提出的问题不能以通用和优雅的方式在强类型语言中完成。

认为它是这样的: 如果可以从字面上任何东西,包括在运行时生成的类型时,您不能创建一个强类型列表,其中T是将typeof()。

如果你不希望在运行时所产生的任何类型的,我会尝试重构你的解决方案中使用泛型类型。如果无论出于何种原因需要为每种类型执行自定义操作,则始终可以将基本类中的公共逻辑抽象出来,并创建一个派生类型,您可以在其中实现该类型的自定义逻辑。

如果这不符合您的需求,您可以使用关键字是C#报价,但是这并不能保证类型安全,你可以得到运行时异常。

相关问题