我有一个我在运行时才知道的类型:
Type givenType = FindOutTypeOf(someObject);
我有以下方法:
public void SomeMethod(Type type);
我需要使用List<givenType>
类型调用它。
如何将给定类型(我在运行时了解)转换为给定类型的列表?
答案 0 :(得分:4)
试试这个
var listType = typeof(List<>);
var constructedListType = listType.MakeGenericType(givenType);
答案 1 :(得分:-1)
编辑:误解了这个问题。
以下代码将允许您在运行时获取对象的类型并创建该类型的列表,然后可以将其传递给您的方法:
Type givenType = typeof(someObject);
Type listType = typeof(List<>).MakeGenericType(givenType);
SomeMethod(listType);
答案 2 :(得分:-1)
如果我理解正确,那么你所要求的就不能用一种强有力的语言来完成一种通用而优雅的方式。
这样想: 如果someobject可以是字面上的任何内容,包括在运行时生成的类型,则无法创建强类型列表,其中t是typeof(someobject)。
如果您不希望在运行时生成任何类型,我会尝试重构您的解决方案以使用泛型类型。如果出于某种原因需要为每种类型执行自定义操作,则可以始终在基类中抽象公共逻辑,并创建派生类型,您可以在其中实现该类型的自定义逻辑。
如果这不符合您的需求,您可以使用C#提供的dynamic关键字,但这不保证类型安全,您可以获得运行时异常。