我正在尝试创建一个指定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
重复?通过这种方式,我的返回类型(以及我将对象转换为的类型)在编译时将是未知的。
对我来说,这似乎是设计上不可能的,但如果你能弄清楚,我将不胜感激。
编辑:我被卡住的地方是,例如,当你在铸造时,return (T) result
如果你使用的是通用方法,你可以这样做,但你不能这样做,Type t = ...; return (t) result
这是行不通的。您不能转换为作为编译时未知的参数传递给您的类型。