这是我的代码:
void DoSomething<T>()
{
var constructor = typeof(T).GetConstructor(null);
if(constructor != null)
{
DoSomethingElse<T>(); // compiler error
}
else
{
//...
}
}
void DoSomethingElse<T>() where T:new()
{
T x = new T();
//...
}
有没有办法说服编译器T是合法的T:new()?
答案 0 :(得分:4)
除了添加new()
约束之外,没有办法说服编译器,如果你不能这样做,唯一的方法是使用Reflection
:
var methodType = // get the type of DoSomethingElse here
var genericMethod = methodType.MakeGenericMethod(typeof(T));
// pass instance instead of null if this is an instance method
genericMethod.Invoke(null);