这是我需要做的简化版本。在目前的状态下,我想做的事情没有意义。然而,它以一种简单的方式显示了问题。
我需要在 function1< T>()中调用 function2< T>(),其中T:TheClass,new(),其中T:class
Something<T> function1<T>() where T : class {
//cannot call function2 directly due to compile error
//return function2<T>();
//What I need as a pseudo code
if (T is TheClass and T is new())
return Then function2<T>()
else
throw Exception
}
Something<T> function2<T>() where T : TheClass, new() {
//...
}
答案 0 :(得分:2)
UPDATE MyTable
SET Text = N'אבגד'
where Id > 50
限制无法在运行时进行验证(与可以使用new()
/ as
的继承不同) - 所以没有C#构造可以写入从is
调用function2
并保持强类型。
您唯一的选择是通过反射构建方法而不是调用它。见How do I use reflection to call a generic method?
答案 1 :(得分:0)
你真的不能这样做。我猜测function2
正在new T()
进行T : class
,function1
约束new()
可能无法做到这一点。
您可以尝试删除ConstructorInfo
约束并使用针对 Type type = typeof(T);
ConstructorInfo ctor = type.GetConstructor(new Type[0]);
if(ctor == null) throw new InvalidOperationException();
object instance = ctor.Invoke(new object[0]);
的检查手动执行此操作,并从中获取实例:
{{1}}