【发布时间】:2015-02-03 09:17:31
【问题描述】:
现在,在你们都急于告诉我这个问题已经在其他地方得到回答之前here,例如here,让我说它只是部分得到了回答,至少据我所知。
我有一个Type 类型的变量,我想创建一个t 代表的类型的实例,所以我称之为...
var inst = Activator.CreateInstance(t);
但是,inst 在 object 上,我希望它是 t 类型。以下都不合法:
t inst = Activator.CreateInstance(t);
var inst = (t)Activator.CreateInstance(t);
var inst = Activator.CreateInstance(t) as t;
我该怎么做?如何让 inst 在编译时成为我想要的类型?
【问题讨论】:
-
"我如何在编译时获得我想要的类型?" - 出于什么目的?你到底想用这个做什么?如果您告诉我们您想要达到的目标,我想我们可以就适当的方式提供建议。
-
@MarcGravell,我需要能够将
inst作为类型化参数传递给另一个方法。 -
单一方法?还是一系列具有不同类型参数的重载?如果是单一方法:只需转换它 -
Foo(123, "abc", (SomeType)inst);;如果是一系列重载:dynamic可能会有所帮助 - 但这是一个 hack -
本质上,这将是基于类型本身的多种不同方法之一。
-
然后是 reflection(手动选择并调用该方法)或
dynamic。后者基本上是前者的自动化方式。Foo(123, "abc", (dynamic)inst);将调用它可以找到的最合适的方法(如果找不到合适的方法,则会出错)
标签: c#