从Activator.CreateInstance()而不是对象返回所需的类型

问题描述 投票:1回答:3

我正在尝试创建指定的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){...

c# c#-4.0 system.reflection
3个回答
0
投票

实际上您可以这样写GetInstance


0
投票

这可能有助于您创建所需类型的实例:


0
投票

遵循已知模式

© www.soinside.com 2019 - 2024. All rights reserved.