我正在尝试创建指定的Type
实例,无论用户想要拥有什么。为了快速说明我的目的,请参见下面的代码:
static void Main(string[] args)
{
object o = GetInstance(typeof(int));
Console.WriteLine("Created type: {0}", o.GetType().FullName);
}
public static object GetInstance(Type t)
{
Console.WriteLine("Creating instance of {0}", t.FullName);
return Activator.CreateInstance(t);
}
问题是Activator.CreateInstance()
默认情况下返回object
。该方法还有一个重载,例如T Activator.CreateInstance<T>()
,它是无参数的,并返回您指定为T
的类型。
但是,问题是T
应该在调用此方法时进行硬编码,因此应为固定值。我正在尝试创建所需类的实例并将其作为其类型返回。
现在,如果您使用此方法,则应编写如下内容:
int i = GetInstance(typeof(int)) as int
我正尝试将其减少为:
int i = GetInstance(typeof(int))
有没有一种方法可以在GetInstance
内部进行转换并摆脱as int
重复?通过这种方式,我的返回类型(以及我将对象投射到的类型)将是编译时未知。
对我来说,这在设计上似乎是不可能的,但如果您能理解,我将不胜感激。
EDIT:我被困的地方是投射时,如果您使用的是通用方法,则可以执行return (T) result
,但不能执行Type t = ...; return (t) result
,这是行不通的。您不能转换为作为参数在编译时未知传递给您的类型。
我正在尝试创建一个指定类型的实例,无论用户想要拥有什么。为了快速了解我的目的,请参见以下代码:static void Main(string [] args){...
实际上您可以这样写GetInstance
:
这可能有助于您创建所需类型的实例: