我有一个类型,我只了解在运行时:如何将运行时已知的类型转换为给定类型的列表?
Type givenType = FindOutTypeOf(someObject);
和我有以下方法:
public void SomeMethod(Type type);
,我需要与List<givenType>
类型来调用它。
如何转换给定类型(即我知道了在运行时)给定类型的列表?
我有一个类型,我只了解在运行时:如何将运行时已知的类型转换为给定类型的列表?
Type givenType = FindOutTypeOf(someObject);
和我有以下方法:
public void SomeMethod(Type type);
,我需要与List<givenType>
类型来调用它。
如何转换给定类型(即我知道了在运行时)给定类型的列表?
试试这个
var listType = typeof(List<>);
var constructedListType = listType.MakeGenericType(givenType);
编辑:误解了这个问题。
下面的代码将让你在运行时获得对象的类型,并创建该类型,然后可以传递给你的方法列表:
Type givenType = typeof(someObject);
Type listType = typeof(List<>).MakeGenericType(givenType);
SomeMethod(listType);
更新以更好地解决您的问题。 – Chase
如果我理解正确,那么您提出的问题不能以通用和优雅的方式在强类型语言中完成。
认为它是这样的: 如果someobject可以从字面上任何东西,包括在运行时生成的类型时,您不能创建一个强类型列表,其中T是将typeof(someobject)。
如果你不希望在运行时所产生的任何类型的,我会尝试重构你的解决方案中使用泛型类型。如果无论出于何种原因需要为每种类型执行自定义操作,则始终可以将基本类中的公共逻辑抽象出来,并创建一个派生类型,您可以在其中实现该类型的自定义逻辑。
如果这不符合您的需求,您可以使用dynamic关键字是C#报价,但是这并不能保证类型安全,你可以得到运行时异常。
你的意思是如何创建给定类型的列表?如果是这样:http://stackoverflow.com/questions/4661211/c-sharp-instantiate-generic-list-from-reflected-type –
不,我需要通过类型(C#类),这是一个给定的名单键入,我检索。我会改的VAR的问题 –
嗯,还有你的回答仍然是类型[这里](http://stackoverflow.com/a/4661237/3010968)你并不需要调用'Activator.CreateInstance' ,'structuredListType'就是你要找的。 –