【发布时间】:2011-06-16 14:59:53
【问题描述】:
我有以下两种方法:
Method1(int a, int b)
{
var type = Typ1(a, b);
}
Method2
{
var type = Typ2(a, b);
}
我想写一个通用的方法来完成这项工作:
GenericMethod<T>(int a, int b)
{
var type = new T(a, b);
}
但是 T 不接受任何输入参数。我怎样才能做到这一点?
我知道使用Activator.Instance(T, a, b) 可以做到这一点,但它的性能成本很高。
我也知道我可以使用 T() 调用泛型类型的默认构造函数,然后设置属性,但在我的情况下,我想传递 2 个强制性参数。
我不想引入没有参数的构造函数。
有没有办法用泛型做到这一点?
谢谢,
【问题讨论】:
-
应该注意的是,即使你在一个泛型类型上执行
new T(),它是一个new()约束,编译器也会简单地将它转换为一个Activator.CreateInstance<T>()调用,所以没有性能益处。解决这个问题的唯一方法是使用某种工厂模式,类似于 SLaks 对委托所做的。