C# 从类型列表中获取实例

C# 从类型列表中获取实例,c#,linq,types,C#,Linq,Types,我有以下代码,但我无法使其运行。 我只想从给定的类型列表创建一个实例列表 List<Type> types = new List<Type> { typeof(String), typeof(Double), typeof(Object) }; List<object> instances = types.Select(t => Activator.CreateInstance(t) as t); 这里的编译错误是由于这样一个

我有以下代码,但我无法使其运行。 我只想从给定的类型列表创建一个实例列表

List<Type> types = new List<Type>
{
    typeof(String),
    typeof(Double),
    typeof(Object)
};

List<object> instances = types.Select(t => Activator.CreateInstance(t) as t);

这里的编译错误是由于这样一个事实,即通过说as t,您不允许编译器将其自动转换为type object。这段代码仍然有缺陷,因为它要求列表中的所有类型都有默认构造函数(string没有默认构造函数)

你能再举一个“我不能让它运行”的例子吗?我用我得到的语法错误编辑了这个问题。当你试图将它转换为实际类型时,这个问题甚至无法编译,你可以说List instances=types。Select(t=>Activator.CreateInstance(t)).ToList();但这仍然会在运行时中断,因为并非所有这些都有默认构造函数。错误是,您无法强制转换,因为您不知道它是什么类型,请将
删除为t
,因为1。不能仅将实例强制转换为类型和2。你不知道那是什么类型的。此外,您还需要添加
.ToList()
,因为您无法将IEnumerable隐式转换为List实例,所以必须创建它。
typeof(t)
在那里工作吗?注释中的代码工作正常,我的代码中的类型仅作为示例。我计划创建一个
列表
,并使用派生类型来创建多态实例。我不知道这里的确切目的是什么,但有一次我写了这样的代码,结果是非常难闻的代码。我有一些可能的计算,我想让我的应用程序执行。对于我创建的每个
选择
实例,我都需要计算,因此每种类型的计算都有一个类。我想在应用程序启动时通过IoC或动态dll加载创建一个列表,列出我可以实例化的所有可能的计算。因此,如果我有一个基类
Calculation
和子类
MaxCalculation
AverageCalculation
,等等,并且对于我创建的每个
选择
,我需要
Calculation
的每个可用子类的一个实例。我完全同意我的代码现在的味道。我提出了一个新问题:
> t is a variable but is used like a type