使用包含Type的变量创建Generic <T>类型实例


85

是否可以实现以下代码?我知道它不起作用,但是我想知道是否有解决方法?

Type k = typeof(double);
List<k> lst = new List<k>();

您的评论有些困惑,“这可以在C#4.0中完成”。它不能,至少不能以您显示的方式。C#4仍然要求在编译时指定泛型类型参数。您仍然无法将Type变量作为通用类型参数传递。
itowlson 2010年

1
当是问题时,请在问题中表达问题。指定的代码无法使用C#4.0完成。
Lasse V. Karlsen


抱歉C#4.0。我的意思是,答案可以使用C#4.0中的概念,而不一定是代码可以在C#4.0中工作。感谢您编辑DrJokepu。
克里斯,2010年

12
我认为这个问题可以说得很完美-数量适中!
RunHolt

Answers:


119

就在这里:

var genericListType = typeof(List<>);
var specificListType = genericListType.MakeGenericType(typeof(double));
var list = Activator.CreateInstance(specificListType);

我想这就是我想要的。让我仔细检查一下,我会暂时将您的答案标记为答案。
克里斯,2010年

3
我认为这里的主要问题是您没有向我们描述您想要的东西。您向我们展示了某件事的失败尝试,然后询问如何完成您想要的事情。如果您想要答案,而不是猜测,则应描述您需要做的事情,而不是尝试做的事情。
Lasse V. Karlsen

我基本上想创建一个List <>,其中将类型指定为Type变量。
克里斯,2010年

3
感谢David M,您的代码完全可以满足我的需求。抱歉,因为我没有提供足够的问题而无法回答。
克里斯,2010年

通用方法是否可以这样做?我需要通过方法的动态类型,我已经在下面的链接stackoverflow.com/questions/4101784/…
Mathiyazhagan 2016年

3

较干净的方法可能是使用通用方法。做这样的事情:

static void AddType<T>()
    where T : DataObject
{
    Indexes.Add(typeof(T), new Dictionary<int, T>());
}

我不确定“索引”的含义,是在其他地方声明的变量吗?
jrh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.